
我正在研究 rsync 以同步 Windows 中的遠端和本機資料夾(使用 cwrsync)。我有一個疑問,是否可以只上傳部分變更?
例如,我最初有一個 100 MB 的文件,我將使用命令上傳它,
rsync -a /source/path/ /dest/path/
然後我將對該文件進行一些更改。如果我再次運行相同的命令,整個 100 MB 檔案將再次上傳。相反,如何在上傳時附加對該文件所做的更改?
答案1
您需要的是--inplace
選項。
我強烈建議您閱讀相關部分rsync手冊並理解這個選項的意思:
- 到位此選項更改 rsync 在需要更新檔案資料時傳輸檔案的方式:rsync 不是建立檔案的新副本並在完成後將其移動到位的預設方法,而是將更新的資料直接寫入目標檔案。
這有幾個影響:
- 硬連結沒有損壞。這意味著新資料將透過目標檔案的其他硬連結可見。此外,嘗試將不同的原始檔案複製到多重連結的目標檔案上將導致目標資料來回變化的「拉鋸戰」。
- 正在使用的二進位檔案無法更新(作業系統將阻止這種情況發生,或嘗試換入其資料的二進位檔案將出現異常或崩潰)。
- 文件的資料在傳輸過程中將處於不一致的狀態,如果傳輸中斷或更新失敗,檔案的資料將保持這種狀態。
- rsync 無法寫入的檔案無法更新。雖然超級用戶可以更新任何文件,但普通用戶需要被授予打開文件的寫入權限才能成功寫入。
- 如果目標檔案中的某些資料在複製到檔案中稍後的位置之前被覆蓋,則 rsync 的增量傳輸演算法的效率可能會降低。如果您使用,則這不適用 --備份,因為 rsync 足夠智能,可以使用備份檔案作為傳輸的基礎檔案。
警告:您不應使用此選項來更新其他人正在存取的文件,因此在選擇使用此選項進行副本時要小心。
此選項對於傳輸具有基於區塊的更改或附加資料的大檔案以及磁碟綁定而非網路綁定的系統非常有用。它還可以幫助防止寫入時複製檔案系統快照與僅進行了微小更改的檔案的整個內容產生分歧。
該選項意味著- 部分的(因為中斷的傳輸不會刪除檔案),但與--部分目錄和 --延遲更新。 rsync 2.6.4 之前的版本- 到位也不相容--比較目標和--連結目標。
您可能也對僅增長文件感興趣--append
或--append-verify
選擇僅增長文件。
答案2
您正在使用 rsync 從一個目錄複製到另一個目錄 - 該選項--整份文件此時生效:
-W, --整份文件使用此選項時,不使用 rsync 的增量傳輸演算法,而是按原樣發送整個檔案。當來源電腦和目標電腦之間的頻寬高於磁碟頻寬時(特別是當「磁碟」實際上是網路檔案系統時),如果使用此選項,傳輸可能會更快。當來源和目標都指定為本地路徑時,這是預設設置,但前提是沒有有效的批次寫入選項。
您需要在一側以守護程式模式啟動 rsync,以觸發具有增量傳輸的 rsync 演算法。