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





binary compare diff (10)


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

Короткий ответ: запустите 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

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

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

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




Я обнаружил, что Visual Binary Diff был тем, что я искал, доступным на:

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



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

diff -qs {file1} {file2}

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

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

OS X El Capitan




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

sha1 [FILENAME1]
sha1 [FILENAME2]



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

[[email protected] ~]$ diff 1.bin 2.bin
Binary files 1.bin and 2.bin differ

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




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




md5 <filename1>

md5 <filename2>

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







Для обнаружения дефектов флэш-памяти мне пришлось написать этот скрипт, который показывает все блоки 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 минут. Он не поддерживает аргументы командной строки и не поддерживает пробелы в именах файлов




with open("test.txt", "a") as myfile:
    myfile.write("appended text")




file binary compare diff