Centos

cp 和 tar 創建臨時文件然後執行原子 mv 嗎?

  • July 25, 2017

我正在使用 Java 的 Files.walkFileTree 定期掃描特定目錄以查找 *.csv 文件,然後讀取它們。

我知道 mv 是原子的(至少在同一設備內),因此就競爭條件而言,“mv”文件不應該成為問題。

如果我改為執行 cp ,是否 cp 首先複製到不同的文件名,然後對原始名稱執行原子 mv ?還是會通過直接讀寫導致競爭條件?

我對使用 tar & gz 將文件提取到另一個目錄有同樣的問題。

PS。如果答案取決於作業系統,我正在使用 CentOS 6。如果可能的話,是否也可以為 Windows 提及答案?

對於 GNUcp和 GNU tar(大多數 Linux 發行版的標準實現,包括 CentOS),它們都在原地創建文件。我很確定大多數其他實現也是如此。不過,編寫包裝腳本以使其在功能上具有原子性並不難。我不確定 Windows,但我不認為它提供了 POSIX 為文件系統操作原子性所做的更多保證。

還值得注意的是,mv它只有在不跨越文件系統邊界時才是原子的,否則它相當於執行cp然後取消連結源文件。

引用自:https://unix.stackexchange.com/questions/381741