Как сравнить двоичные файлы, чтобы проверить, если они одинаковы?



каков самый простой способ (с помощью графического инструмента или командной строки на Ubuntu Linux) узнать, являются ли два двоичных файла одинаковыми или нет (за исключением меток времени)? Мне не нужно на самом деле извлекать разницу. Мне просто нужно знать, одинаковы они или нет.

717   10  

10 ответов:

стандартный unix diff покажет, если файлы одинаковы или нет:

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

Если вывод команды отсутствует, это означает, что файлы не имеют различий.

использовать . Это будет либо выйти чисто, если они двоичные равны, или он будет печатать, где происходит первое различие и выход.

нашел Визуальная Двоичная Разница было то, что я искал, доступно на:

  • Ubuntu:apt-get install vbindiff
  • Mac OS X:port install vbindiff через MacPorts.
  • Mac OS X:brew install vbindiff через Homebrew

используйте sha1 для генерации контрольной суммы:

sha1 [FILENAME1]
sha1 [FILENAME2]

я использовал hexdump для преобразования двоичных файлов в шестнадцатеричное представление, а затем открыл их в meld / kompare / любом другом инструменте diff. В отличие от тебя, я искал различия в файлах.

hexdump tmp/Circle_24.png > tmp/hex1.txt
hexdump /tmp/Circle_24.png > tmp/hex2.txt

meld tmp/hex1.txt tmp/hex2.txt

используйте команду cmp. См.двоичные файлы и принудительное сравнение текста для получения дополнительной информации.

cmp -b file1 file2

md5 <filename1>

md5 <filename2>

смотрите, если они одинаковы : -)

Diff с помощью следующих параметров будет выполнять двоичное сравнение, чтобы проверить, отличаются ли файлы вообще, и он будет выводить, если файлы одинаковы:

diff -qs {file1} {file2}

Если вы сравниваете два файла с одинаковым именем в разных каталогах, вы можете вместо этого использовать эту форму:

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

OS X El Capitan

для поиска дефектов флэш-памяти мне пришлось написать этот скрипт, который показывает все блоки 1K, которые содержат различия (а не только первый как cmp -b нет)

#!/bin/sh

f1=testinput.dat
f2=testoutput.dat

size=$(stat -c%s $f1)
i=0
while [ $i -lt $size ]; do
  if ! r="`cmp -n 1024 -i $i -b $f1 $f2`"; then
    printf "%8x: %s\n" $i "$r"
  fi
  i=$(expr $i + 1024)
done

выход:

   2d400: testinput.dat testoutput.dat differ: byte 3, line 1 is 200 M-^@ 240 M- 
   2dc00: testinput.dat testoutput.dat differ: byte 8, line 1 is 327 M-W 127 W
   4d000: testinput.dat testoutput.dat differ: byte 37, line 1 is 270 M-8 260 M-0
   4d400: testinput.dat testoutput.dat differ: byte 19, line 1 is  46 &  44 $

отказ от ответственности: я взломал скрипт в 5 минут. Он не поддерживает аргументы командной строки и не поддерживает пробелы в именах файлов

попробуйте diff-s

короткий ответ: run diff С -s переключатель.

длинный ответ: читайте ниже.


вот пример. Давайте начнем с создания двух файлов со случайным двоичным содержимым:

$ 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

теперь тест1.bin и test2.бин должен быть другим:

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

... и test1.bin и copyoftest1.бин должен быть идентично:

$ 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-identical-files) переключатель чтобы сделать diff более подробным:

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

Comments

    Ничего не найдено.