防止 rsync 更改 ctime

防止 rsync 更改 ctime

我有以下情况:

我在一个目录中有一些文件,其中有一个进程正在更改一些文件并更新所有文件的 ctime。我想将所有文件 rsync 到目标目录,但保留那些仅更新了 ctime 的文件的 ctime。

我已尝试以下操作(~/source/test.txt 是我的源文件,~/target/test.txt 是我的目标文件)。

chmod a+w source/test.txt (updates ctime but not mtime)
rsync -a -v -c --copy-dirlinks --delete --partial --inplace source/test.txt target

我的预期是,那些在源目录中仅更新了 ctime 的文件不会被 rsync 处理,显然情况确实如此。但目标目录中的相应文件仍然会更新其 ctime - 这目前给我的备份过程带来了麻烦。

有什么办法可以让 rsync 不更新尚未修改的文件的 ctime?

答案1

您可以尝试一下该--checksum选项是否符合您的要求:

-c, --checksum

这会改变 rsync 检查文件是否已更改且需要传输的方式。如果没有此选项,rsync 将使用“快速检查”(默认情况下)检查发送方和接收方之间每个文件的大小和上次修改时间是否匹配。此选项会将其更改为比较每个大小匹配的文件的 128 位校验和。生成校验和意味着双方将花费大量磁盘 I/O 来读取传输文件中的所有数据(这先于传输已更改文件的任何读取),因此这会大大降低速度。

当进行简短测试时,这有效,但使用快捷-a选项时无效,可能是因为它包含了-t保留 mod 时间的功能。

相关内容