Чи є bdiff (1) в Linux?


9

У bdiff(1)Solaris є команда, яка дозволяє вам розміщувати diff(1)файли розміром, що перевищує розмір оперативної пам’яті ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html ).

Чи є щось подібне в Linux? Я спробував googling, але не знаходжу, який пакет має bdiffUbuntu.



можливий дублікат: unix.stackexchange.com/questions/2150/…
slm

Відповіді:


13

Здається, bdiff доступний в Linux (принаймні, як частина інструментального інструменту Heirloom Toolchest ).

розл

Я, мабуть, просто використовую звичайний старий 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 і файл delta deltaAB.txt.

    Щоб відтворити B, запустіть:

    rdiff patch A deltaAB.txt B
    

Чому це працює?

Я виявив цю публікацію в блозі під назвою: Кращий розряд чи що робити, коли GNU розряджається з пам'яті ("diff: пам'ять вичерпано") , в якій повідомляється, що rdiff файлів 4,5 ГБ споживає лише ~ 66 Мб оперативної пам'яті.

lfhex

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

скріншот

                  ss lfhex]! [ss lfhex

Список літератури


Хоча це не завжди задокументовано, GNU diff дозволяє використовувати -Hяк синонім для --speed-large-files.

2
bsdiffце двійковий інструмент різниці, а не великий файловий інструмент "diff".

3
На жаль, здається, ніби --speed-large-filesпрапор не впливає на спосіб, коли GNU різко завантажує файли в пам'ять. Спробуйте запустити, 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 -> Редагування бази -> ASCII для обох панелей.
Крістіан Піетш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.