Я получаю сообщение diff: memory exhausted
об ошибке, когда пытаюсь различить два файла объемом 27 ГБ, которые в основном похожи на Linux-систему с CentOS 5 и 4 ГБ оперативной памяти Кажется, это известная проблема.
Я ожидаю, что найдется альтернатива для такой важной утилиты, но я не могу ее найти. Я полагаю, что решение будет использовать временные файлы, а не память для хранения необходимой информации.
- Я попытался использовать
rdiff
иxdelta
, но они лучше показывают изменения между двумя файлами, например, патч, и не очень полезны для проверки различий между двумя файлами. - Пробовал VBinDiff , но это визуальный инструмент, который лучше сравнивать двоичные файлы. Мне нужно что-то, что может передать различия в STDOUT, как обычные
diff
. - Есть много других утилит, таких как,
vimdiff
которые работают только с небольшими файлами. - Я также читал о Solaris,
bdiff
но не смог найти порт для Linux.
Любые идеи, кроме разделения файла на более мелкие части? У меня есть 40 таких файлов, поэтому я стараюсь не разбивать их.
Ответы:
cmp
делает вещи побайтово, так что, вероятно, не будет исчерпано памяти (только что проверил это на двух файлах по 7 ГБ) - но вы, возможно, ищете более подробную информацию, чем список «файлов X и Y, различающихся в байтах х , линия у ". Если сходство ваших файлов смещено (например, файл Y имеет идентичный блок текста, но не в том же месте), вы можете передать смещенияcmp
; Вы могли бы, вероятно, превратить его в ресинхронизирующее сравнение с помощью небольшого скрипта.В сторону: В случае, если кто-то еще приземлится здесь, когда ищет способ подтвердить, что две структуры каталогов (содержащие очень большие файлы) идентичны:
diff --recursive --brief
(илиdiff -r -q
для краткости, или, возможно, дажеdiff -rq
) будут работать и не исчерпывать память.источник
Я нашел эту ссылку
Я не уверен, что вы пробовали эти два варианта или они могли бы работать на вас. Удачи.
источник
diff -H
это недокументированный и устаревший псевдоним дляdiff --speed-large-files
.Если файлы идентичны (одинаковой длины), за исключением нескольких значений байтов, вы можете использовать скрипт, подобный следующему (
w
количество байтов на строку в hexdump, отрегулируйте по ширине экрана):Это не очень быстро, но делает работу.
источник