Gibt es bdiff (1) unter Linux?

9

bdiff(1)In Solaris gibt es Befehle, mit denen Sie diff(1)Dateien mit einer Größe erstellen können, die größer als Ihre RAM-Größe ist ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html ).

Gibt es so etwas unter Linux? Ich habe versucht zu googeln, finde aber nicht, welches Paket bdiffin Ubuntu enthalten ist.

AntonioK
quelle

Antworten:

13

bdiff scheint unter Linux verfügbar zu sein (zumindest als Teil der Heirloom Toolchest ).

diff

Ich würde wahrscheinlich nur normales altes Diff mit diesem Schalter verwenden:

diff --speed-large-files bigfileA bigfileB

Warum funktioniert es nicht?

Siehe Kommentar von @EvanTeitelman, --speed-large-fileshat keinen Einfluss darauf, wie Dateien in den Speicher geladen werden.

Kann mit dem folgenden Befehl nachgewiesen / bestätigt werden, dass er nicht funktioniert:

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

bsdiff

Es ist schwer, dies zu bestätigen, aber ich habe ein Tool namens gefunden, bsdiffdas von abgeleitet ist bdiff. Ich habe bestätigt, dass dieses Tool einfach in Ubuntu ist apt-get install bsdiff.

Warum könnte es funktionieren?

Nochmals vielen Dank an @EvanTeitelman in den Kommentaren, das bsdiffobige ist ein Diff-Tool für Binärdateien. bsdiffist ein binäres Diff-Tool und kann mit großen Dateien umgehen. Es ist unklar, wie groß. Siehe die folgenden Links zu einem Thread, in dem die Verwendung erläutert wird.

rdiff

Ich denke, Sie könnten auch rdiff verwenden , um dies zu tun. Rdiff kann mit sehr großen Dateien umgehen.

  1. Erstellen Sie eine Signatur einer Datei:

    rdiff signature A sigs.txt
    
  2. Verwenden Sie die generierte Signaturdatei sigs.txt und die andere große Datei B, um das Delta zu erstellen:

    rdiff delta sigs.txt B deltaAB.txt
    
  3. Delta enthält alle Informationen, die Sie benötigen, um Datei B neu zu erstellen, wenn Sie nur A und die Delta-Datei deltaAB.txt haben.

    Führen Sie Folgendes aus, um B neu zu erstellen:

    rdiff patch A deltaAB.txt B
    

Warum funktioniert es?

Ich fand diesen Blog-Beitrag mit dem Titel: Ein besserer Diff oder was zu tun ist, wenn der GNU-Diff nicht genügend Speicher hat ("diff: Speicher erschöpft") , der besagt, dass ein Riff von 4,5 GB-Dateien nur ~ 66 MB RAM verbraucht.

lfhex

lfhex ist eine Anwendung zum Anzeigen und Bearbeiten von Dateien in hexadezimalem, oktalem, binärem oder ASCII-Text. Die Hauptstärke von lfhex ist die Fähigkeit, mit Dateien zu arbeiten, die viel größer als der Systemspeicher sind. Es ist jedoch ein GUI-Tool.

Bildschirmfoto

                  ss von lfhex]! [ss von lfhex

Verweise

slm
quelle
Obwohl dies nicht immer dokumentiert ist, können Sie es mit GNU diff -Hals Synonym für verwenden --speed-large-files.
2
bsdiffist ein binäres Diff-Tool, kein Diff-Tool für große Dateien.
3
Leider scheint das --speed-large-filesFlag keinen Einfluss auf die Art und Weise zu haben, in der GNU diff Dateien in den Speicher lädt. Versuchen Sie zu laufen fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testb, um dies zu bestätigen. (Oder werfen Sie einen Blick auf den Quellcode.)
2
Ich schaffte es zu bauen bdiffaus dem Erbstück Werkzeugkasten nach dem Austausch /sbin/shvon /bin/shin dem Makefiles. Wenn ich jetzt versuche, es an Ort und Stelle auszuführen, bekomme ich bdiff: Can not execute '/usr/5bin/diff'. Entschuldigung, ich möchte nichts installieren /usr/5bin/. Dies ist keine praktikable Lösung. Die anderen hier genannten Optionen funktionieren bei mir nicht, da ich die Unterschiede als Text betrachten möchte.
Christian Pietsch
1
PS: Überraschenderweise lfhex -c file1 file2funktioniert es gut für mich, nachdem ich für beide Fenster Ansicht -> Basis bearbeiten -> ASCII eingestellt habe.
Christian Pietsch