MyTetra Share
Делитесь знаниями!
Как сравнивать бинарные файлы в Linux. Вариант с помощью diff и cmp.
Время создания: 30.12.2011 21:38
Текстовые метки: linux, diff, бинарный, файл, cmp, hex, сравнение
Раздел: Компьютер - Linux - Bash - Команды и скрипты
Запись: xintrea/mytetra_syncro/master/base/1325270282dwz17joaq6/text.html на raw.github.com

Для сравнения бинарных файлов можно воспользоваться командами:


diff -u <(od -A x -t x1 ref.bmp) <(od -A x -t x1 orig.bmp)


или


diff <(xxd orig.bmp) <(xxd ref.bmp)


Что делают эти команды? Сначала выводится содержимое файлов в HEX-виде с помощью команд od или xxd. А потом через diff сравнивается уже это HEX-представление.


Традиционно, если различий нет, команда diff закончится молча, без вывода каких-либо сообщений.


Однако надо понимать, что большие файлы (около 2 GB) таким способом сравнить невозможно, как минимум на 32-х битных системах. Будет появляться ошибка:


diff: память исчерпана


Причем, судя по htop, память не расходуется. Это какие-то внутренние ограничения толи diff, толи od, толи xxd, толи механизма потока. Как обойти эту проблему - не знаю.



Вместо команды diff можно воспользоваться командой cmp:


cmp -b -l file1 file2

683263 161 q 150 h

683264 222 M-^R 377 M-^?

683265 212 M-^J 354 M-l


Программа cmp способна нормально работать с большими файлами. Она показывает адрес байта и два значения - в первом и втором файле.



Для интерактивного сравнения можно воспользоваться программой vbindiff.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования