需要一个Linux命令行应用程序来比较二进制文件,并在第一个不匹配时退出。

5

有没有一种Linux命令行应用程序,可以比较两个二进制文件,并在第一次不匹配时退出?

cmp似乎没有退出选项。

2个回答

11

cmp 没有这个 选项,因为它总是在第一次不匹配时停止。

$ cmp -b /bin/ls /bin/sed
/bin/ls /bin/sed differ: byte 25, line 1 is 320 M-P 300 M-@

我对Linux还很陌生,所以我会用这个作为借口 :) ... 我尝试了使用-l选项,它会继续执行下去... 我看了一下(但没有尝试)-b选项,因为man页面上只写着“打印不同的字节”,没有提到退出... 活着就是学习!... 谢谢。 - Peter.O
“-b”选项只是为了说明,如果省略,行为仍然符合您的要求。遗憾的是,许多标准实用程序(来自GNU的实用程序)的手册非常差。 - Fred Foo

4
我认为您可以使用3个工具来完成任务:
  • cmp
  • diff
  • md5sum
cmp更适合处理二进制文件,而diff更适合处理文本文件。对于二进制文件,diff仅报告它们是否不同。diff也适用于目录。
前两种工具都可以静默地完成您需要的任务。diff使用-q开关,cmp使用-s开关,只返回一个代码:0表示两个文件匹配,1表示不匹配。 cmp还有一个很好的选项,可以避免(在某种程度上)读取整个文件(如果您有大文件,则非常有用):如果您知道文件可能在第N行或第N到M行之间不同,则可以执行以下操作(例如:对于行N = 10和M = 20):
cmp file1 file2 10 20 

我将md5sum添加到列表中,因为如果您有机会在编辑这些文件时每次计算MD5校验和,则可以仅将其与快速查找它们是否匹配。 在这种情况下,我假设您有很多文件要比较。


谢谢,但问题不是“无声”的问题,而是不必要地浏览5 GB的数据... - Peter.O
再次感谢提供额外的信息。我需要这个来比较两个DVD .iso文件(以及将来的参考),所以我肯定希望在不匹配时能够快速退出...(你为提供更全面的答案付出的额外努力让我给你打分 :)) - Peter.O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接