Homepage
 

Hallo, Gast.
Suchen
Hint einsenden
Hint einsenden
Website Quick Links
 
Aktuelle OS X Hints
 
Neue Forumsbeiträge
 
Zurück  Vergleichen von Dateien und ganzen Verzeichnissen
UNIX
Beim Kopieren kompletter Verzeichnisse von einem Ort an einen Anderen, eventuell sogar per Netz, ist es manchmal schwierig, direkt zu erkennen, ob alle Dateien korrekt übertragen wurden, z.B. weil der Datentransfer zwischendurch unterbrochen worden war. Falls die Dateigrößen im Quell- und Zielverzeichnis unterschiedlich sind, ist eine Fehlererkennung damit sehr einfach möglich. Es kann allerdings auch sein, dass die Dateien in beiden Verzeichnissen gleichgroß sind, weshalb eine Überprüfung des Dateiinhaltes notwendig ist. Im folgenden beschreibe ich zwei Möglichkeiten, mit denen man eventuelle Unterschiede feststellen kann.

In beiden Fällen kann ein transparentes Terminal.app-Fenster (Fenstereinstellungen -> Farbe -> Schieberegler Transparenz) durchaus nützlich sein.

Vergleich der MD5-Checksummen

Wechseln sie im Terminal mit cd ins Quellverzeichnis und lassen sie mit md5 * die MD5-Checksummen aller Dateien (selbst in den Unterverzeichnissen) berechnen. Öffnen sie anschließend ein weiteres, größtenteils transparentes, Terminalfenster, wechseln sie ins Zielverzeichnis und berechnen dort ebenfalls die Checksummen. Wenn sie die beiden Terminalfenster direkt übereinanderlegen, können sie Unterschiede in den Checksummen direkt erkennen.

Hintergrund dessen ist die Tatsache, dass die von MD5 errechnete Summe bereits für ein einzelnes, unterschiedliches Byte einen anderen Wert hat. Somit sind beide Dateien gleich, sofern die MD5-Checksumme gleich ist. Für weitere Details zu MD5 verweise ich auf den oben verlinkten Wikipedia-Artikel über MD5.

Statt mit zwei übereinander liegenden Fenstern können sie selbstverständlich auch die Summen in Dateien schreiben lassen und diese Dateien anschließend vergleichen:

md5 /Pfad/zum/Quellverzeichnis/* > quelle.txt
md5 /Pfad/zum/Zielverzeichnis/* > ziel.txt
diff quelle.txt ziel.txt


Vorteil dieses Beispiels ist, dass es auch dann anwendbar ist, wenn die zu vergleichenden Dateien nicht oder nur teilweise übertragen werden sollen, z.B. um zu ermitteln, ob die aktuelle Version einer Datei bereits auf einen Webserver hochgeladen wurde.

Falls sie das Programm md5sum von Fink installiert haben, können sie sich in obigem Beispiel ein Stück Arbeit ersparen:

md5sum /Pfad/zum/Quellverzeichnis/* > quelle.txt
md5sum -c quelle.txt /Pfad/zum/Zielverzeichnis/*


Vergleich aller Dateiinhalte

Wenn sie nicht nur wissen möchten, ob die Quell- und Zieldateien unterschiedlich sind, sondern welches diese Unterschiede sind, müssen sie das bewährte Unix-Programm diff anwenden:

diff /Pfad/zum/Quellverzeichnis/ /Pfad/zum/Zielverzeichnis/

Die Ausgabe dieses Befehls gibt an, welche Teile der Dateien herausgenommen werden müssen (gekennzeichnet durch < am Zeilenanfang) und welche hinzugefügt werden müssen (> am Anfang der Zeile), um aus den Quell- die Zieldateien zu erhalten. Der Vorteil an dieser Methode ist, dass diff auch feststellt, wenn nicht alle Dateien übertragen worden sind oder sich im Zielverzeichnis zusätzliche Dateien befinden.
Falls es tatsächlich Unterschiede zwischen Quelle und Ziel geben sollte, brauchen sie bei der Verwendung von diff und patch lediglich eine einzige Datei, einen Patch („Flicken“) zu übertragen:

diff -Naur /Pfad/zum/Quellverzeichnis/ /Pfad/zum/Zielverzeichnis/ > quelle-ziel.diff

Und dann im Zielverzeichnis patch -p0 < quelle-ziel.diff. Bei der Übertragung des Patches per Netz können sie durch Kompression (im Folgenden bz2) dieser Datei noch ein wenig Zeit und Daten sparen:
diff -Naur /Pfad/zum/Quellverzeichnis/ /Pfad/zum/Zielverzeichnis/ | bzip2 > quelle-ziel.diff.bz2
und
bunzip quelle-ziel.diff.bz2 | patch -p0

Vergleich mit FileMerge.app

In Analogie zur Anwendung von diff können sie auch das Developer Tool opendiff benutzen, welches die Unterschiede zwischen den Dateien mit FileMerge anzeigt:

opendiff /Pfad/zum/Quellverzeichnis/ /Pfad/zum/Zielverzeichnis/

Wie der Name FileMerge vermuten lässt, können sie damit auch die Änderungen an den Zieldateien, die nötig sind, um die Quelldateien zu erhalten, vornehmen lassen.

[aplysia: Hint wurde von Apfelmännchen erweitert.]
Erstellt von spiff am 28.12.2005 um 23:51 Uhr | Hits: 2849
Hint Optionen







 
top top