Rsync

rsync -u 選項如何幫助同步兩個文件夾?

  • March 9, 2022

我希望同步文件夾source和文件夾destination,其中所有更改source都將反映到目標。

在這種情況下,我會像這樣使用 rsync 命令:

rsync -av --progress --delete "/source/" "/destination"

使用 / 表示源來指定其內容,而沒有 / 表示目標。

現在,如果源有更新的修改時間,我是否必須使用該-u選項才能更新目的地?還是-av已經足夠了?

我需要這個-i選項嗎?謝謝!

-u, –update 這會強制 rsync 跳過目標上存在的任何文件,並且修改時間比源文件新。(如果現有目標文件的修改時間等於源文件的修改時間,則如果大小不同,它將被更新。)請注意,這不會影響符號連結或其他特殊文件的複制。此外,無論對像上的日期是什麼,發送者和接收者之間的文件格式差異始終被認為對更新來說足夠重要。換句話說,如果源有一個目錄,目標有一個文件,那麼無論時間戳如何,都會發生傳輸。此選項是傳輸規則,而不是排除規則,因此它不會影響進入文件列表的數據,因此也不會影響刪除。

–delete 這告訴 rsync 從接收端刪除無關的文件(不在發送端的文件),但僅限於正在同步的目錄。您必須要求 rsync 發送整個目錄(例如“dir”或“dir/”)而不使用萬用字元作為目錄內容(例如“dir/*”),因為萬用字元由 shell 擴展並且 rsync 因此得到一個請求傳輸單個文件,而不是文件的父目錄。從傳輸中排除的文件也不會被刪除,除非您使用 –delete-excluded 選項或將規則標記為僅在發送方匹配(請參閱過濾規則部分中的包含/排除修飾符)。在 rsync 2.6.7 之前,除非啟用了 –recursive,否則此選項將無效。從 2.6.7 開始,啟用 –dirs (-d) 時也會發生刪除,但僅限於正在複製其內容的目錄。如果使用不當,此選項可能會很危險!首先嘗試使用 –dry-run 選項 (-n) 執行以查看將要刪除的文件是一個非常好的主意。如果發送方檢測到任何 I/O 錯誤,則將自動禁止刪除目的地的任何文件。這是為了防止發送端的臨時文件系統故障(例如 NFS 錯誤)導致目標上的文件大量刪除。您可以使用 –ignore-errors 選項覆蓋它。–delete 選項可以與 –delete-WHEN 選項之一結合使用而不會發生衝突,以及 –delete-excluded。然而,如果沒有指定 –delete-WHEN 選項,rsync 將在與 rsync 3.0.0 或更高版本通信時選擇 –delete-during 算法,在與較舊的 rsync 通信時選擇 –delete-before 算法。另請參見 –delete-delay 和 –delete-after。

現在,如果源有更新的修改時間,我是否必須使用該-u選項才能更新目的地?

不,已經是這樣了。這樣做-u是為了防止在目的地較新時發生更改。如果沒有-u,這些文件將更新到源上的版本(可能更舊)。

我需要 -i 選項嗎?

-i(like --progress) 不會影響同步行為,只會影響顯示的輸出。它僅顯示有關所選每個文件的附加資訊。

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