知道两个二进制文件是否相同(除了时间戳)最简单的方法是什么(在Ubuntu Linux上使用图形工具或命令行)?我不需要提取差值。我只需要知道它们是否相同。


当前回答

我发现Visual Binary Diff是我正在寻找的,可用的:

Ubuntu: Sudo apt安装vbindiff Arch Linux: sudo pacman -S vbindiff Mac OS X通过MacPorts: 端口安装vbindiff Mac OS X通过Homebrew: 酿造安装vbindiff

其他回答

使用sha1生成校验和:

sha1 [FILENAME1]
sha1 [FILENAME2]

标准的unix diff将显示文件是否相同:

[me@host ~]$ diff 1.bin 2.bin
Binary files 1.bin and 2.bin differ

如果该命令没有输出,则意味着文件没有差异。

试试不同的

简单的回答:使用-s开关运行diff。

长话短说:继续往下读。


举个例子。让我们先创建两个包含随机二进制内容的文件:

$ dd if=/dev/random bs=1k count=1 of=test1.bin
1+0 records in
1+0 records out
1024 bytes (1,0 kB, 1,0 KiB) copied, 0,0100332 s, 102 kB/s

                                                                                  
$ dd if=/dev/random bs=1k count=1 of=test2.bin
1+0 records in
1+0 records out
1024 bytes (1,0 kB, 1,0 KiB) copied, 0,0102889 s, 99,5 kB/s

现在让我们复制第一个文件:

$ cp test1.bin copyoftest1.bin

现在test1.bin和test2.bin应该是不同的:

$ diff test1.bin test2.bin
Binary files test1.bin and test2.bin differ

... test1.bin和copyoftest1.bin应该是相同的:

$ diff test1.bin copyoftest1.bin

但是等等!为什么没有输出?!?

答案是:这是有意为之。在相同的文件上没有输出。

但是有不同的错误代码:

$ diff test1.bin test2.bin
Binary files test1.bin and test2.bin differ

$ echo $?
1


$ diff test1.bin copyoftest1.bin

$ echo $?
0

幸运的是,现在你不必每次都检查错误代码,因为你可以使用-s(或——report- identity -files)开关来让diff变得更详细:

$ diff -s test1.bin copyoftest1.bin
Files test1.bin and copyoftest1.bin are identical

使用cmp命令。有关更多信息,请参阅二进制文件和强制文本比较。

cmp -b file1 file2

带有以下选项的Diff将进行二进制比较,以检查文件是否完全不同,如果文件相同,则输出:

diff -qs {file1} {file2}

如果你在比较两个不同目录下同名的文件,你可以使用这种形式:

diff -qs {file1} --to-file={dir2}

OS X船长