我有3个二进制文件。我们称他们为file1.bin
,file2.bin
和file3.bin
。
file1.bin
和file2.bin
有一些共同的部分。file2.bin
和file3.bin
有一些共同的部分。我想找到file1.bin
和file2.bin
之间file2.bin
和file3.bin
之间不同的公共部分。
您如何推荐实现这一目标?我已经使用xxd
将二进制文件转储到文本文件,然后使用vim -d file1.txt file2.txt file3.txt
进行三向差异。
但是,vim
标记所有文件中的部分已更改,即使它仅在一个文件中更改并在其他两个文件中保持不变。我希望这些特殊事件的标记方式不同。
答案 0 :(得分:6)
也许您可以使用内置的unix diff(我认为它是OSX的一部分),但使用--unchanged-group-format
列出相似之处。为file1和file 2执行此操作。然后对file2和file3执行此操作。然后,您可以对两个结果文件执行常规差异。
有关如何获得相似性的想法,请查看this post。
答案 1 :(得分:0)
我工作的工具(ECMerge)就是这样做的。你只需要区分3个二进制文件,它将在彼此前面呈现相等的部分,并在两者之间适当放置修改后的字节。无需先获得十六进制转储。您可以在JavaScript中编写脚本,根据diff结果和文件中的字节输出您喜欢的任何内容(它也可以在命令行中使用)。
答案 2 :(得分:-1)