我有两个具有相同文件结构的系统(A,B)。文件是相同的,但在其中一个位置 (B),文件时间戳不正确。问题是 B 中的大多数时间戳设置为比 A 更新的日期。有没有办法使用 rsync (或其他一些工具)来纠正这个问题?
问题是,如果我不做rsync -azEX --delete A B
任何修改,则 B 端不会进行任何修改,因为日期显示文件较新(并且传输整个文件结构是我想避免的一个选项)。
答案1
如果您的A
和B
代表不同的系统而不是本地文件系统的一部分,则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
层次结构中相应文件的时间戳。B
hostB