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