慎用rsync

doNotTellU發表於2021-01-25
rsync -azH --progress --delete --delay-updates SRC DEST

這個命令會將DEST路徑下不屬於SRC的檔案全部刪除,罪魁禍首是--delete這個引數。
-a引數指定除了遞迴同步以外,也要同步元資訊(比如修改時間、許可權等)。
-z引數指定同步時壓縮資料。
-H引數指定保留硬連結。
--progress引數指定在傳輸過程中展示進度。
--delete引數指定刪除只存在於目標目錄、不存在於源目標的檔案,即保證目標目錄是源目標的映象。
--delay-updates引數指定將receiver端每個重組的臨時檔案保留在某個目錄中,直到傳輸結束之前才一次性將它們全部重新命名為各自對應的目標檔案。這樣的行為使得所有檔案的更新更具有原子性(譯者注:如果你瞭解資料庫事務,就知道原子性是什麼意思,最直白地說,具有原子性表示要麼全部成功,要麼全部失敗,所以這裡更新具有原子性表示要麼全部更新成功,要麼全部更新失敗,但由於重新命名覆蓋目標檔案後是不可回滾的,所以這裡的原子性並不是那麼的嚴格)。預設情況下,這些臨時檔案將放在每個目標檔案所在目錄下的.~tmp~子目錄下,但如果指定了選項--partial-dir,那麼將使用該選項指定的目錄。該選項使得receiver端使用更多的記憶體空間,並且需要更多的磁碟空間以儲存額外的目標檔案副本。


參考:

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章