rsync 本身无独立差异检查模式,但可通过 --dry-run 搭配 --itemize-changes(-i)实现:模拟同步并逐行标出新增、更新或删除项;配合 --checksum 可强制内容级比对,--delete --dry-run 则可识别目标端冗余文件。

rsync 本身不提供“只检查差异、不传输”的独立模式,但可以通过特定选项组合实现差异检测效果——核心是用 --dry-run 搭配 --itemize-changes(或简写 -i),让 rsync 模拟同步过程并清晰列出哪些文件会被更新、删除或新增。
用 --dry-run + -i 显示详细差异项
这是最常用、最直观的差异检查方式。它不真正传输任何数据,仅输出将要发生的变更:
- 命令示例: rsync -avni user@host:/path/to/remote/ /local/path/
-
各选项含义:
-a保证属性比对(权限、时间戳等);-v显示过程;-n(即--dry-run)跳过实际传输;-i(即--itemize-changes)逐行标出变化类型(如>f+++++++++表示新增文件,cS.......表示权限或大小变化)。 -
关键提示:源路径末尾是否带
/影响比对逻辑——remote/表示同步目录内容,remote表示同步整个目录本身。
用 --checksum 强制按内容比对(绕过时间戳)
默认情况下,rsync 仅对比文件大小和修改时间,若远程文件被重写但时间戳未更新,可能误判为“无变化”。加 --checksum 可强制计算校验和,确保内容级差异被识别:
- 适用场景:怀疑文件内容已变但 mtime 未更新(如某些容器内文件、NFS 挂载点);
- 命令示例: rsync -avnc --checksum user@host:/data/ ./backup/
- 注意:校验和计算会增加 CPU 和网络开销,大文件慎用;
用 --delete --dry-run 找出远程多出的文件
如果想确认目标端是否存在源端已删除的冗余文件,可启用 --delete 并配合 --dry-run。此时 rsync 会列出所有将被删除的条目(即远程有、本地没有的文件):
- 命令示例: rsync -avnd --delete user@host:/src/ /dst/
-
输出解读:含
deleting前缀的行即为目标端多余项; -
安全建议:首次使用务必加
-n验证,避免误删;
简化差异统计:用 --stats 获取汇总信息
若只需知道“有多少文件不同”,而非逐个查看,可搭配 --stats 获取摘要:
- 命令示例: rsync -avn --stats user@host:/log/ /var/log/backup/
-
关注输出字段:
Number of files(总文件数)、Number of files transferred(将传输数,即差异数)、total size(差异内容总大小);











