Требуется приложение командной строки Linux для сравнения двоичных файлов и выхода при первом несовпадении

Существует ли приложение командной строки Linux, которое сравнивает два двоичных файла и завершает работу при первом несовпадении?

cmp не похоже на выход

2 ответа

Решение

cmp не имеет этой опции, потому что она всегда завершается при первом несоответствии.

$ cmp -b /bin/ls /bin/sed
/bin/ls /bin/sed differ: byte 25, line 1 is 320 M-P 300 M-@

Я думаю, что вы могли бы пойти с помощью 3 инструментов:

  • cmp
  • diff
  • md5sum

cmp лучше для двоичных файлов и diff лучше для текстовых файлов для бинарных файлов diff просто сообщает, отличаются ли они или нет. diff работает также для каталогов.

Любой из первых двух может выполнить то, что вам нужно, молча. diff использует -q переключатель и cmp использует -s переключиться, чтобы сообщить вам только код возврата: 0, если два файла совпадают с 1, если нет.

cmp также имеет хорошую опцию, позволяющую избежать (вроде) чтения всего файла (хорошо, если у вас большие файлы): если вы знаете, что файлы могут отличаться в первых N строках или между строками N и M, вы можете сделать это (например, для строка N = 10 и M = 20):

cmp file1 file2 10 20 

я добавил md5sum к списку, потому что если у вас есть возможность вычислять контрольную сумму MD5 каждый раз, когда вы редактируете один из этих файлов, то вы можете сравнить только это, чтобы быстро найти, совпадают они или нет. В этом случае я предполагаю, что у вас есть много файлов для сравнения.

Другие вопросы по тегам