diff与rsync对比目录的校验逻辑、效率差异及替代方案咨询
大媒体目录差异对比问题解答
1. diff与rsync --dry-run的校验和逻辑是否相同
二者逻辑完全不同:
- 标准GNU
diff默认采用逐字节对比逻辑,直接读取两个文件的全量内容逐位比对,不会额外生成哈希校验和,只有部分定制版本可选校验和对比模式。 rsync默认仅对比文件的元数据(大小+修改时间),只要两个文件元数据完全一致就会判定为相同,不会读取文件内容;只有额外加--checksum参数时,才会计算文件的哈希值(3.0+版本默认MD5,旧版本用MD4)做内容对比,和diff的逐字节比对逻辑完全不同。
2. 大文件目录对比的效率差异
分两种场景:
- 不需要严格校验内容,仅排查新增/删除/元数据变更的文件:
rsync --dry-run(不加--checksum)速度远高于diff,因为rsync仅扫描目录元数据,不需要读取任何文件内容,针对你提到的RAW照片、4K视频这类大体积文件,速度差距可达几十到上百倍。 - 需要严格校验内容一致性:加了
--checksum的rsync --dry-run效率仍然高于diff。rsync采用流式哈希计算,单个文件仅需读取一次生成哈希值,两个文件仅需对比哈希字符串即可;diff需要同时读取两个文件逐字节比对,IO和CPU开销都更高,大文件场景下rsync的优势更明显。
3. 更优的目录一致性校验、差异排查方案
针对你的大媒体文件场景,推荐三类方案按需选择:
- 仅排查差异、后续需要执行同步:直接用rsync即可,参考命令:
输出内容即为两个目录的差异项,确认无误后去掉# 仅对比元数据的dry-run,输出待同步差异 rsync -avn --delete /folder1/ /folder2/ # 需要严格校验内容的话加--checksum参数 rsync -avn --delete --checksum /folder1/ /folder2/-n参数即可执行同步。 - 需要长期留存校验记录、跨存储介质校验:用
rclone check,支持并行计算校验和,可导出差异清单,适配本地存储、对象存储等多种介质,对大文件的优化比diff好很多。 - 纯校验目录完全一致、不需要同步:用
sha256deep(或md5deep)工具,先生成源目录的全量哈希清单,再用清单校验目标目录,参考命令:
若第二条命令无任何输出,说明两个目录的文件内容100%一致。# 递归生成folder1所有普通文件的SHA256哈希清单 sha256deep -r -o f /folder1 > folder1_sha256.txt # 用清单校验folder2,输出差异/缺失/多余的文件 sha256deep -r -o f -x folder1_sha256.txt /folder2
内容的提问来源于stack exchange,提问作者jrh
相关产品推荐
相关产品推荐

