Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
diff ist das Standardprogramm für die Kommandozeile zum Vergleichen des Inhalts von zwei Dateien. Es können aber auch Ordner verglichen werden, um herauszufinden, ob sie gleiche Dateien enthalten. Grafische Oberflächen und Alternativen sind im Artikel Textdateien vergleichen zusammengefasst.
diff ist Teil der GNU Diffutils
diffutils
und in jeder Ubuntu- (bzw. Linux-)Installation enthalten.
Die allgemeine Syntax lautet [1]:
diff [OPTIONEN] DATEI1 DATEI2
diff kennt folgende Optionen:
Optionen von diff (Auswahl) | |
Option | Beschreibung |
-q | für quick, gibt nur Unterschiede aus |
-s | für same, meldet wenn Dateien gleich sind |
--help | Hilfe |
-r | für rekursiv, vergleicht Unterverzeichnisse wenn vorhanden |
-y | tabellarische Ausgabe, auch gleiche Zeilen, ungleiche Zeilen werden markiert |
--suppress-common-lines | unterdrückt gleiche Zeilen |
-a | behandelt alle Dateien (z.B. binäre) wie Text |
-d | versucht mit erhöhtem Aufwand kleinere Veränderungen zu finden |
--speed-large-files | geht von großen Dateien und vielen, kleinen, verstreuten Veränderungen aus |
DATEI1:
gleich auch gleich wieder gleich Unterschied 1 Unterschied 2 Unterschied 5
DATEI2:
gleich auch gleich wieder gleich Unterschied 3 Unterschied 4
diff -q DATEI1 DATEI2
Dateien '''DATEI1''' und '''DATEI2''' unterscheiden sich
diff DATEI1 DATEI2
4,6c4,5 < Unterschied 1 < Unterschied 2 < Unterschied 5 --- > Unterschied 3 > Unterschied 4
diff gibt an, was an DATEI1 geändert werden muss, damit sie mit DATEI2 identisch wird. Zuerst gibt diff an, in welcher Zeile sich die Unterschiede befinden. Im Beispiel wäre das "4,6c4,5" nämlich: Zeilen 4 bis (,) 6 müssen geändert (c) werden, damit sie mit den Zeilen 4 bis 5 in DATEI2 identisch werden. c steht dabei für Ändern (change), d steht für Löschen (delete) und a steht für Hinzufügen (add).
Zeilen mit <
sind in der ersten (linken) Datei vorhanden und Zeilen mit >
in der zweiten (rechten).
Vergleichen von Ordnern:
diff -s ORDNER1 ORDNER2
Dateien ORDNER1/DATEI1 und ORDNER2/DATEI1 sind identisch Dateien ORDNER1/DATEI2 und ORDNER2/DATEI2 sind identisch Nur in ORDNER2: DATEI3
Ausführlichere Beispiele (in Englisch) sind auf Computer Hope zu finden.
Wer sich mit Programmierung, Bugs oder dem Verbessern von Programmen beschäftigt, benutzt diff um Änderungen per Versionsverwaltung mitzuteilen. Um nicht alle Codedateien mit Änderungen auszutauschen, werden nur die geänderten Stellen im Diff-Format gespeichert. Der so erstellte Diff kann dann als Patch angewendet werden.
Folgende Optionen von diff sind außerdem noch für das Erstellen einer Patchdatei interessant:
Optionen von diff | |
Option | Beschreibung |
-q | ignoriert in diesem Fall fehlende Dateien |
-u | für unified, gibt NUM (Standard 3) der unveränderten Zeilen aus |
-N | für New, erstellt fehlende Dateien |
diff -uNr ORIGINALDATEI VERBESSERTE_DATEI > DIFFDATEI.diff
Die Datei DIFFDATEI.diff würde dann in etwa so aussehen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | --- a/ORIGINALDATEI +++ b/VERBESSERTE_DATEI @@ -1,8 +1,9 @@ Gleich 1 Gleich 2 Gleich 3 + Unterschied 1 + Unterschied 2 - Unterschied 3 - Unterschied 4 + Unterschied 5 Gleich 4 Gleich 5 Gleich 6 |
Nach Angabe der Dateien, in welcher Zeile man sich befindet und wie viele Zeilen es vorher und danach sind, kommen die drei gleichgebliebenen Zeilen. Die Angabe der Verzeichnisse (a/ und b/) dient nur als Platzhalter, falls Dateien bereits vorhanden sind. Zeilen mit +
sind dazugekommen, Zeilen mit -
weggenommen und Zeilen mit einem Leerzeichen "
" gleichgeblieben.
diff -uNr ORDNER1 ORDNER2 > DIFFORDNER.diff
Der Inhalt der Datei DIFFORDNER.diff:
1 2 3 4 5 6 7 8 9 | diff -uNr ORDNER1/DATEI3 ORDNER2/DATEI3 --- ORDNER1/DATEI3 +++ ORDNER2/DATEI3 @@ -0,0 +1,5 @@ + Unterschied 1 + Unterschied 2 + Unterschied 3 + Unterschied 4 + Unterschied 5 |
Hier wurden die Ordner verglichen und in den -
und +
-Zeilen mit angegeben. Da DATEI3 noch nicht in ORDNER1 vorhanden (0,0) ist, werden die Zeilen 1-5 einfach eingefügt. Somit wird die Datei bei einem Anwenden von patch erstellt.
Diese Revision wurde am 27. Februar 2017 11:02 von aasche erstellt.