Есть ли bdiff (1) в Linux?

9

В bdiff(1)Solaris есть команда, позволяющая создавать diff(1)файлы, размер которых превышает размер вашей оперативной памяти ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html ).

Есть ли что-то подобное в Linux? Я попробовал поискать в Google, но я не могу найти, какой пакет есть bdiffв Ubuntu.

AntonioK
источник

Ответы:

13

Похоже, что bdiff доступен в Linux (по крайней мере, как часть инструмента семейной реликвии ).

разница

Я бы, вероятно, просто использовал обычный старый diff с этим переключателем:

diff --speed-large-files bigfileA bigfileB

Почему это не работает?

Смотрите комментарий @EvanTeitelman, --speed-large-filesэто не влияет на то, как файлы загружаются в память.

Может быть продемонстрировано / подтверждено не работать с помощью следующей команды:

fallocate -l 10G testa; fallocate -l 10G testb && \
        diff --speed-large-files -a testa testb

bsdiff

Трудно подтвердить это , но я нашел инструмент под названием , bsdiffкоторое вытекает из bdiff. Я подтвердил, что этот инструмент в Ubuntu, просто apt-get install bsdiff.

Почему это может работать?

Еще раз спасибо @EvanTeitelman в комментариях, bsdiffвыше это инструмент сравнения для двоичных файлов. bsdiffявляется бинарным инструментом сравнения и может работать с большими файлами Неясно, насколько большой. Смотрите следующие ссылки на ветку, в которой обсуждается ее использование.

RDIFF

Я думаю, что вы также можете использовать rdiff, чтобы сделать это. Rdiff умеет работать с очень большими файлами.

  1. Создайте подпись одного файла:

    rdiff signature A sigs.txt
    
  2. Используйте созданный файл подписи sigs.txt и другой большой файл B для создания дельты:

    rdiff delta sigs.txt B deltaAB.txt
    
  3. Delta содержит всю информацию, необходимую для воссоздания файла B, когда у вас есть только A, и дельта-файл deltaAB.txt.

    Чтобы воссоздать B, запустите:

    rdiff patch A deltaAB.txt B
    

Почему это работает?

Я нашел это сообщение в блоге под названием: «Лучшая разница или что делать, когда в GNU diff не хватает памяти» («разница: память исчерпана») , в которой сообщается, что файл формата 4,5 ГБ занимал только ~ 66 МБ ОЗУ.

lfhex

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

Скриншот

                  ss of lfhex]! [ss of lfhex

Ссылки

SLM
источник
Хотя это не всегда документировано, GNU diff позволяет использовать его -Hкак синоним --speed-large-files.
2
bsdiffэто бинарный инструмент сравнения, а не инструмент сравнения больших файлов.
3
К сожалению, кажется, что --speed-large-filesфлаг не влияет на способ, которым GNU diff загружает файлы в память. Попробуйте запустить, fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testbчтобы подтвердить это. (Или взгляните на исходный код.)
2
Мне удалось построить bdiffиз семейной реликвии Toolchest после замены /sbin/shна /bin/shв Makefiles. Теперь, когда я пытаюсь выполнить это на месте, я получаю bdiff: Can not execute '/usr/5bin/diff'. Извините, я не хочу ничего устанавливать на /usr/5bin/. Это не жизнеспособное решение. Другие варианты, упомянутые здесь, не работают для меня, потому что я хочу увидеть различия в тексте.
Кристиан Питч
1
PS: Удивительно, lfhex -c file1 file2но у меня хорошо работает после настройки View -> Editing base -> ASCII для обеих панелей.
Кристиан Питч