当我这样做时rsync --dry-run -rv
,rsync 列出的文件除了时间戳外都相同。
我的理解是,仅使用这些标志(实际上不会改变比较行为),rsync 就会看到不同的时间戳,检查文件大小(当然,大小相同),然后最终对文件进行校验和,然后再标记它们以进行更新。如果校验和匹配,即使时间戳不同,文件也不会更新。
我误解了什么?
答案1
看起来你理解得很好,但有一个例外。当你处于--dry-run
rsync 模式时,它不会计算校验和,因此你可能会看到在完成校验和后不会传输的文件。
因为时间戳不同,rsync 知道它将被更新,但由于它处于试运行模式,它将无法报告唯一需要更新的是时间戳。
我正在用它来监控远程机器之间的同步失败......所以它实际上只是一个远程差异。
我不知道如何在空运行模式下强制进行校验和。
因为听起来您正在尝试强制比较本地和远程的一组同步文件,那么您可能想尝试这样的事情?(sha256deep如果您想要更快的速度,可以用 sha1 或 md5 deep 替换)。
diff -u <( /usr/bin/sha256deep -l -z -r -o f path | sort -k 3 ) \
<( ssh remote /usr/bin/sha256deep -l -z -r -o f path | sort -k 3 )`
该命令将计算本地和远程每个文件的 md5 校验和。两个列表按路径排序,diff 将显示校验和的差异。