有没有办法让 rsync 打印所有不同文件的完整文件路径而无需实际传输任何文件?
或者,我需要一种方法来仅基于大小变化或最后修改时间在两棵树上(通过 SSH)比较文件之间的差异。
答案1
Rsync 有一个dry-run
选项:
-n, --dry-run show what would have been transferred
我不确定这是否是你想要的。
如果您想要diff
跨两棵树的文件,您可以使用 find 和管道以递归方式搜索两个方向,以将输出输出到 ls,并将两者通过管道传输到文件。然后您可以使用diff
它们来比较文件。
答案2
我更喜欢使用 --out-format 来查看详细信息,并将其通过管道传输到 less:
rsync -azh --dry-run --delete-after --out-format="[%t]:%o:%f:Last Modified %M" source destination | less
答案3
rsync -rvn localdir targetdir
-n 表示仅显示操作(不执行任何操作)。
请注意,您需要“v”,否则它不会显示任何内容!(其余的答案都忘记了这一点……)
答案4
事实是,如果你运行它rsync -v ...
,它会在屏幕上输出一个文件名,该文件是正在转移(或者,如果您正在执行 --dry-run,则应该已经转移)。要确定为什么rsync 即将传输它,使用 itemize 模式:https://serverfault.com/a/618740/27813
正如其他人所指出的,默认情况下,rsync 仅根据文件大小和时间戳进行比较,两者必须匹配,否则将对该文件启动“增量复制”。如果您确实想查看哪些文件不同,请使用“-c”校验和模式。