使用 rsync(或其他工具)来纠正两个系统之间的文件时间戳

使用 rsync(或其他工具)来纠正两个系统之间的文件时间戳

我有两个具有相同文件结构的系统(A,B)。文件是相同的,但在其中一个位置 (B),文件时间戳不正确。问题是 B 中的大多数时间戳设置为比 A 更新的日期。有没有办法使用 rsync (或其他一些工具)来纠正这个问题?

问题是,如果我不做rsync -azEX --delete A B任何修改,则 B 端不会进行任何修改,因为日期显示文件较新(并且传输整个文件结构是我想避免的一个选项)。

答案1

如果您的AB代表不同的系统而不是本地文件系统的一部分,则rsync只会传输元数据。不过,它会读取双方的文件,以确保校验和正确,但只会传输文件中不同的部分:

rsync -azX /some/path/ user@remote:/target/path

如果你能保证双方的内容相同,你可以关闭时间检查,但仍然携带时间戳值。这将读取双方的文件元数据,但不会读取文件内容。

如果文件大小不同,rsync则会执行校验和(再次在两侧)以查看文件的哪些部分需要传输,但否则如上所述,对于相同大小的文件,将不考虑文件内容。

rsync -azX --size-only /some/path/ user@remote:/target/path

作为一个有效的示例,我有一个 600MB 的文件从伦敦传输到阿姆斯特丹,从伦敦发出的链接非常慢(1Mbit/s)。显然原始副本花费了相当长的时间。我复制了文件,然后重置了时间戳。建议#1 大约需要 10 秒。建议#2 花费的时间不到 1 秒。两者都不传输任何文件内容。

答案2

假设 A 或 B 中都没有损坏的符号链接,我建议mtree:

$ mtree -Pcp A -k time | ssh hostB mtree -Ptp B

这将根据文件层次结构中找到的时间戳创建一个树规范,并使用该规范来设置驻留在主机上的A层次结构中相应文件的时间戳。BhostB

相关内容