执行diff对比操作时如何忽略tar、jar等包内文件的时间戳
忽略归档包元数据的内容对比方案
单文件tar包快速对比
直接通过tar命令提取包内文件内容到标准流,跳过所有元数据(时间戳、权限、所有者等),直接对比内容:
diff <(tar -xf me.txt.tar -O) <(tar -xf me2.txt.tar -O)
只要包内文件内容一致,该命令无任何输出,符合需求。
多文件tar/jar/zip包通用对比
对于包含多个文件的归档包,可以生成所有内部文件的内容哈希清单,再对比清单即可,不受任何元数据影响:
针对tar包
# 生成第一个tar包的内容哈希清单 tar -xf me.txt.tar --to-command='echo "$(sha256sum) $TAR_FILENAME"' | sort > hash1.txt # 生成第二个tar包的内容哈希清单 tar -xf me2.txt.tar --to-command='echo "$(sha256sum) $TAR_FILENAME"' | sort > hash2.txt # 对比清单 diff hash1.txt hash2.txt
针对jar/zip包
# 生成第一个jar包的内容哈希清单 for f in $(unzip -Z1 sample1.jar); do echo "$(unzip -p sample1.jar $f | sha256sum) $f"; done | sort > jar1.txt # 生成第二个jar包的内容哈希清单 for f in $(unzip -Z1 sample2.jar); do echo "$(unzip -p sample2.jar $f | sha256sum) $f"; done | sort > jar2.txt # 对比清单 diff jar1.txt jar2.txt
提前规避:打包时固定元数据
如果打包流程可控,可以在生成tar包时强制指定固定元数据,只要内容一致,生成的tar包二进制完全相同,直接用普通diff就能对比:
tar --mtime='1970-01-01 00:00:00' --owner=0 --group=0 --numeric-owner -cvf output.tar 待打包文件
内容的提问来源于stack exchange,提问作者Abhishek Surpur
相关产品推荐
相关产品推荐

