Как различать большие файлы в Linux

Я diff: memory exhausted ошибка при попытке различить два файла 27 ГБ, которые во многом похожи на коробке Linux с CentOS 5 и 4 ГБ оперативной памяти. Кажется, это известная проблема.

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

  • Я пытался использовать rdiff и xdelta, но они лучше отображение изменений между двумя файлами, как патч, и не очень полезно для проверки различий между двумя файлами.
  • пробовал VBinDiff, но это визуальный инструмент, который лучше подходит для сравнения двоичных файлов. Мне нужно что-то, что может передать различия в STDOUT, как обычный diff.
  • есть много других утилит, таких как vimdiff это работает только для небольших файлов.
  • Я тоже читал про Солярис bdiff но я не могу найти порт для Linux.

любые идеи, кроме разделения файла на более мелкие части? У меня 40 из этих файлов таким образом пытается избежать их демонтажа.

21
задан slhck
10.02.2023 18:54 Количество просмотров материала 2849
Распечатать страницу

3 ответа

cmp делает вещи байт за байтом, поэтому, вероятно, у него не закончится память (просто протестировал его на двух файлах размером 7 ГБ), но вы можете искать более подробную информацию, чем список "files X и Y различаются на байт x, line y". Если сходства ваших файлов смещены (например, file Y имеет идентичный блок текста, но не в том же месте), вы можете пройти смещения cmp; вы могли бы превратить его в повторная синхронизация сравнить с небольшим скриптом.

в стороне: в случае, если кто-то еще приземлится здесь, ища способ подтвердить, что две структуры каталогов (содержащие очень большие файлы) идентичны: diff --recursive --brief (или diff -r -q для краткости, а может даже diff -rq) будет работать и не закончится память.

10
отвечен Felix 2023-02-12 02:42

Я нашел это ссылке

diff-H может помочь, или вы можете попробовать установка порта textproc / 2bsd-diff который, по-видимому, не пытается загрузить файлы в оперативную память, так что он может работать на большие файлы более легко.

Я не уверен, если вы попробовали эти два варианта или если они могут работать для вас. Удача.

6
отвечен Jarvin 2023-02-12 04:59

Если файлы идентичны (одинаковой длины), за исключением нескольких байтовых значений, вы можете использовать следующий скрипт (w число байтов в строке, чтобы вывести, приспособиться к ширине экрана):

w=12;
while read -ru7 x && read -ru8 y;
do
  [ ".$x" = ".$y" ] || echo "$x | $y";
done 7< <(od -vw$w -tx1z FILE1) 8< <(od -vw$w -tx1z FILE2) > DIFF-FILE1-FILE2 &

less DIFF-FILE1-FILE2

это не очень быстро, но делает работу.

1
отвечен Tino 2023-02-12 07:16

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх