File-Copy
跨文件系統的近似原子移動?
我必須在 Ubuntu 下將一些文件從一個文件系統移動到另一個文件系統。但是,文件永遠不會作為部分或不完整的文件存在於目的地,至少不在正確的文件名下,這一點非常重要。
到目前為止,我唯一的解決方案是編寫一個腳本,獲取每個文件,將其複製到目的地的臨時名稱,然後在目的地將其重命名(我認為應該是原子的)為原始文件名,最後刪除原始文件.
但是,編寫和調試腳本似乎對於這項任務來說是多餘的。有沒有一種方法或工具已經在本地做到這一點?
rsync
複製到臨時文件名(例如,請參閱Rsync 臨時文件副檔名和rsync - 它是否在傳輸過程中創建臨時文件?),除非您使用該--inplace
選項。只有在文件成功傳輸後才會重命名它們。rsync
還會刪除僅部分傳輸的任何目標文件(例如,由於磁碟已滿或其他錯誤)。還有一個
--remove-source-files
選項可以在源文件成功傳輸後刪除它們。有關更多詳細資訊,請參見rsync
手冊頁。把所有這些放在一起,你可以使用類似的東西:
rsync -ax --remove-source-files source/ target/
此選項對於諸如將文件移出“傳入”隊列或類似於將要處理它們的目錄的任務特別有用。
或者,如果這是一次性鏡像,則可能只使用
rsync
不帶該--remove-source-files
選項的鏡像。如果您願意/需要,您可以稍後刪除源文件。