Rsync
為什麼 rsync 會修改未更改的文件和目錄?
如果我創建兩個同名但修改時間不同的目錄:
$ mkdir -p dir1/dir ; sleep 2 ; mkdir -p dir2/dir $ stat -c %y dir*/dir 2021-09-15 10:54:55.000819360 +0100 2021-09-15 10:54:57.007490593 +0100
然後
rsync
與--size-only
選項一起使用:$ rsync -rtvh --size-only dir1/ dir2/ sending incremental file list ./ dir/ sent 72 bytes received 23 bytes 190.00 bytes/sec total size is 0 speedup is 0.00
我希望沒有什麼改變,因為尺寸是一樣的。但是,修改時間
dir2/dir
確實發生了變化:$ stat -c %y dir*/dir 2021-09-15 10:54:55.000819360 +0100 2021-09-15 10:54:55.000819360 +0100
當大小相同時,文件也會發生這種情況。
為什麼要這樣做?
如果目錄包含大量數據(其他嵌套目錄和文件),也會發生這種情況。目錄實際上被覆蓋了,還是 rsync 只是更新了時間戳?
Rsync 只是更新元數據(僅)以按照您的要求與
-t
標誌匹配。如果您查看手冊(類型
man rsync
),請閱讀說明:Rsync 使用“快速檢查”算法(預設情況下)查找需要傳輸的文件,該算法查找大小或上次修改時間已更改的文件。當快速檢查表明文件的數據不需要更新時,其他保留屬性的任何更改(根據選項的要求)都會直接在目標文件上進行。
該
--size-only
標誌僅更改此“快速檢查”算法,它不會完全跳過文件:–size-only
這修改了 rsync 用於查找需要傳輸的文件的“快速檢查”算法,將其從預設傳輸具有更改大小或更改的最後修改時間的文件更改為僅查找大小已更改的文件。這在使用另一個可能無法準確保留時間戳的鏡像系統後開始使用 rsync 時很有用。