Was ist der einfachste Weg (mithilfe eines grafischen Tools oder einer Befehlszeile unter Ubuntu Linux) festzustellen, ob zwei Binärdateien gleich sind oder nicht (mit Ausnahme der Zeitstempel)? Ich muss den Unterschied nicht wirklich extrahieren. Ich muss nur wissen, ob sie gleich sind oder nicht.
186
cmp
sagt ausdrücklich, dass es einen Byte-für-Byte-Vergleich durchführt, so dass dies meine Standardeinstellung für 2 Binärdateien ist.diff
ist Zeile für Zeile und gibt Ihnen die gleiche Ja / Nein-Antwort, aber natürlich nicht den gleichen Speicherauszug für den Standard-Out-Stream. Wenn die Zeilen lang sind, weil es sich vielleicht nicht um Textdateien handelt, würde ich es vorziehencmp
.diff
hat den Vorteil, dass Sie einen Vergleich von Verzeichnissen und die-r
für die Rekursion angeben können, wodurch mehrere Dateien in einem Befehl verglichen werden.Antworten:
Das Standard-Unix
diff
zeigt an, ob die Dateien identisch sind oder nicht:Wenn der Befehl keine Ausgabe enthält, bedeutet dies, dass die Dateien keine Unterschiede aufweisen.
quelle
diff: memory exhausted
beim Vergleich zweier 13G-Dateien eine bekommen.diff
sagt dir, dass sie "binäre" Fies sind. Da alle Dateien als binär betrachtet werden können, ist dies eine seltsame Behauptung.diff -s 1.bin 2.bin
oderdiff --report-identical-files 1.bin 2.bin
Dies zeigtFiles 1.bin and 2.bin are identical
Verwenden
cmp
Befehl. Dies wird entweder sauber beendet, wenn sie binär gleich sind, oder es wird ausgedruckt, wo der erste Unterschied auftritt, und beendet.quelle
cmp
effizienter alsdiff
. Also würde ich das vorziehen.cmp $1 $2 && echo "identical" || echo "different"
cmp
hat "stillen" Modus:-s, --quiet, --silent
-suppress all normal output
. Ich habe noch nicht getestet, aber ich denke, dass es beim ersten Unterschied aufhören wird, wenn es einen gibt.Ich fand, dass Visual Binary Diff das war, wonach ich suchte, verfügbar auf:
Ubuntu:
Arch Linux:
Mac OS X über MacPorts :
Mac OS X über Homebrew:
quelle
Verwenden Sie sha1, um eine Prüfsumme zu generieren:
quelle
diff
undcmp
beide werden Ihnen sagen, ob sie sich ohne zusätzlichen Aufwand unterscheiden.sha1sum
stattsha1
?Am Ende habe ich hexdump verwendet, um die Binärdateien in die hexadezimale Darstellung zu konvertieren, und sie dann in meld / kompare / einem anderen Diff-Tool geöffnet. Im Gegensatz zu dir war ich nach den Unterschieden in den Dateien.
quelle
hexdump -v -e '/1 "%02x\n"'
Sie diese Option, wenn Sie unterscheiden und genau sehen möchten, welche Bytes eingefügt oder entfernt wurden.Mit der MD5-Hash-Funktion können Sie überprüfen, ob zwei Dateien identisch sind. Auf diese Weise können Sie die Unterschiede auf niedriger Ebene nicht erkennen, aber Sie können schnell zwei Dateien vergleichen.
Wenn beide MD5-Hashes (die Befehlsausgabe) gleich sind, unterscheiden sich die beiden Dateien nicht.
quelle
Verwenden Sie den Befehl cmp. Weitere Informationen finden Sie unter Binärdateien und Erzwingen von Textvergleichen .
quelle
-b
vergleicht keine Dateien im "Binärmodus". Es ist tatsächlich "Mit GNUcmp
können Sie auch die Option-b
oder verwenden--print-bytes
, um die ASCII-Darstellung dieser Bytes anzuzeigen." Dies ist genau das, was ich mithilfe der von Ihnen angegebenen URL zum Handbuch gefunden habe.cmp
ist meiner Meinung nach von Natur aus ein binärer Vergleich. Die-b
Option druckt lediglich das erste Byte, das anders ist.Um Flash-Speicherfehler zu finden, musste ich dieses Skript schreiben, das alle 1K-Blöcke anzeigt, die Unterschiede enthalten (nicht nur den ersten wie
cmp -b
auch)Ausgabe:
Haftungsausschluss: Ich habe das Skript in 5 Minuten gehackt. Es werden weder Befehlszeilenargumente noch Leerzeichen in Dateinamen unterstützt
quelle
sh -x
zum Debuggenreadlink -f $(which sh)
/bin/dash
. Derzeit wird Paste auf Pastebin erstellt.Diff mit den folgenden Optionen würde einen binären Vergleich durchführen, um zu überprüfen, ob die Dateien überhaupt unterschiedlich sind, und es würde ausgegeben, wenn die Dateien auch gleich sind:
Wenn Sie zwei Dateien mit demselben Namen in verschiedenen Verzeichnissen vergleichen, können Sie stattdessen dieses Formular verwenden:
OS X El Capitan
quelle
Versuchen Sie es mit diff -s
Kurze Antwort:
diff
Mit dem-s
Schalter laufen .Lange Antwort: Lesen Sie weiter unten.
Hier ist ein Beispiel. Beginnen wir mit der Erstellung von zwei Dateien mit zufälligen binären Inhalten:
Lassen Sie uns nun eine Kopie der ersten Datei erstellen:
Jetzt sollten test1.bin und test2.bin unterschiedlich sein:
... und test1.bin und copyoftest1.bin sollten identisch sein:
Aber warte! Warum gibt es keine Ausgabe?!?
Die Antwort lautet: Dies ist beabsichtigt. Es erfolgt keine Ausgabe für identische Dateien.
Es gibt jedoch verschiedene Fehlercodes:
Glücklicherweise müssen Sie die Fehlercodes nicht jedes Mal überprüfen, da Sie einfach den Schalter
-s
(oder--report-identical-files
) verwenden können , um diff ausführlicher zu machen:quelle
Versuchen Sie,
radiff2
was ein Teil vonradare2
Disassembler ist. Zum Beispiel mit diesem Befehl:Sie erhalten eine hübsch formatierte Ausgabe mit zwei Spalten, in der Unterschiede hervorgehoben werden.
quelle
Meine Favoriten mit xxd Hex-Dumper aus dem vim-Paket:
1) Verwenden von vimdiff (Teil von vim)
2) mit diff
quelle
Wenn die md5sum identisch ist, sind die Binärdateien identisch
Z.B
quelle
diff
, für die es keinen Grund gibt, sie vorzuziehen.Es gibt eine relativ einfache Möglichkeit, zu überprüfen, ob zwei Binärdateien identisch sind.
Wenn Sie die Dateieingabe / -ausgabe in einer Programmiersprache verwenden; Sie können jedes Bit der beiden Binärdateien in ihren eigenen Arrays speichern.
Zu diesem Zeitpunkt ist die Überprüfung so einfach wie:
quelle