为什么 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 只是更新了时间戳?

答案1

Rsync 只是更新元数据(仅)以匹配您要求的标志-t

如果您查看手册(类型man rsync),请阅读说明:

Rsync 使用“快速检查”算法(默认情况下)查找需要传输的文件,该算法查找大小或上次修改时间已更改的文件。当快速检查表明文件的数据不需要更新时,其他保留属性(根据选项的请求)的任何更改都会直接在目标文件上进行。

--size-only标志仅更改此“快速检查”算法,它不会完全跳过文件:

--仅尺寸

这修改了 rsync 用于查找需要传输的文件的“快速检查”算法,将其从默认传输大小已更改或上次修改时间已更改的文件更改为仅查找大小已更改的文件。当使用另一个可能无法准确保留时间戳的镜像系统后开始使用 rsync 时,这非常有用。

相关内容