File-Copy

跨文件系統的近似原子移動?

  • December 21, 2017

我必須在 Ubuntu 下將一些文件從一個文件系統移動到另一個文件系統。但是,文件永遠不會作為部分或不完整的文件存在於目的地,至少不在正確的文件名下,這一點非常重要。

到目前為止,我唯一的解決方案是編寫一個腳本,獲取每個文件,將其複製到目的地的臨時名稱,然後在目的地將其重命名(我認為應該是原子的)為原始文件名,最後刪除原始文件.

但是,編寫和調試腳本似乎對於這項任務來說是多餘的。有沒有一種方法或工具已經在本地做到這一點?

rsync複製到臨時文件名(例如,請參閱Rsync 臨時文件副檔名rsync - 它是否在傳輸過程中創建臨時文件?),除非您使用該--inplace選項。只有在文件成功傳輸後才會重命名它們。 rsync還會刪除僅部分傳輸的任何目標文件(例如,由於磁碟已滿或其他錯誤)。

還有一個--remove-source-files選項可以在源文件成功傳輸後刪除它們。有關更多詳細資訊,請參見rsync手冊頁。

把所有這些放在一起,你可以使用類似的東西:

rsync -ax --remove-source-files source/ target/

此選項對於諸如將文件移出“傳入”隊列或類似於將要處理它們的目錄的任務特別有用。

或者,如果這是一次性鏡像,則可能只使用rsync不帶該--remove-source-files選項的鏡像。如果您願意/需要,您可以稍後刪除源文件。

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