Rsync

為什麼 rsync 會修改未更改的文件和目錄?

  • September 15, 2021

如果我創建兩個同名但修改時間不同的目錄:

$ 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 時很有用。

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