Czy w Linuksie jest bdiff (1)?

9

W bdiff(1)systemie Solaris dostępna jest komenda, która pozwala na tworzenie diff(1)plików o rozmiarze większym niż rozmiar pamięci RAM ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html ).

Czy jest coś takiego w Linuksie? Próbowałem google, ale nie wiem, który pakiet ma bdiffw Ubuntu.

AntonioK
źródło

Odpowiedzi:

13

bdiff wydaje się być dostępny w systemie Linux (przynajmniej jako część Heirloom Toolchest ).

różn

Prawdopodobnie użyłbym jednak zwykłego starego diff z tym przełącznikiem:

diff --speed-large-files bigfileA bigfileB

Dlaczego to nie działa?

Zobacz komentarz @EvanTeitelman, --speed-large-filesnie wpływa na sposób ładowania plików do pamięci.

Można wykazać / potwierdzić, że nie działa, używając następującego polecenia:

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

bsdiff

Trudno to potwierdzić, ale znalazłem narzędzie o nazwie, bsdiffktóre pochodzi bdiff. Potwierdziłem, że to narzędzie jest w Ubuntu, po prostu apt-get install bsdiff.

Dlaczego to może działać?

Jeszcze raz dziękuję @EvanTeitelman w komentarzach, bsdiffpowyższe jest narzędziem do różnicowania plików binarnych. bsdiffto binarne narzędzie do porównywania i może obsługiwać duże pliki. Nie jest jasne, jak duży. Zobacz poniższe linki do wątku, który omawia jego użycie.

rdiff

Myślę, że możesz również użyć rdiff, aby to zrobić. Rdiff radzi sobie z bardzo dużymi plikami.

  1. Utwórz podpis jednego pliku:

    rdiff signature A sigs.txt
    
  2. Użyj wygenerowanego pliku podpisu sigs.txt i drugiego dużego pliku B, aby utworzyć różnicę:

    rdiff delta sigs.txt B deltaAB.txt
    
  3. Delta zawiera wszystkie informacje potrzebne do odtworzenia pliku B, gdy masz tylko A i plik delta deltaAB.txt.

    Aby odtworzyć B, uruchom:

    rdiff patch A deltaAB.txt B
    

Dlaczego to działa?

Znalazłem ten post na blogu zatytułowany: Lepsza pamięć lub co robić, gdy GNU diff zabraknie pamięci („diff: pamięć wyczerpana”) , która donosi, że pliki o pojemności 4,5 GB zużyły tylko ~ 66 MB pamięci RAM.

lfhex

lfhex to aplikacja do przeglądania i edycji plików w tekście szesnastkowym, ósemkowym, binarnym lub ascii. Główną zaletą lfhex jest możliwość pracy z plikami znacznie większymi niż pamięć systemowa. Jest to jednak narzędzie GUI.

zrzut ekranu

                  ss of lfhex]! [ss of lfhex

Bibliografia

slm
źródło
Chociaż nie zawsze jest to udokumentowane, GNU diff pozwala używać go -Hjako synonimu --speed-large-files.
2
bsdiffto binarne narzędzie do porównywania, a nie narzędzie do porównywania dużych plików.
3
Niestety wydaje się, że --speed-large-filesflaga nie wpływa na sposób, w jaki GNU diff ładuje pliki do pamięci. Spróbuj uruchomić, fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testbaby to potwierdzić. (Lub spójrz na kod źródłowy.)
2
Udało mi się zbudować bdiffz Heirloom Toolchest po zastąpieniu /sbin/shgo /bin/shw plikach makefiles. Teraz, gdy próbuję wykonać to w miejscu, rozumiem bdiff: Can not execute '/usr/5bin/diff'. Przepraszam, nie chcę niczego instalować /usr/5bin/. To nie jest realne rozwiązanie. Inne wymienione tutaj opcje nie działają dla mnie, ponieważ chcę sprawdzić różnice jako tekst.
Christian Pietsch
1
PS: Zaskakująco, lfhex -c file1 file2działa dobrze dla mnie po ustawieniu Widok -> Podstawa edycji -> ASCII dla obu paneli.
Christian Pietsch,