diff
diff - Vergleicht zwei Dateien
Beschreibung
Installation
diff ist Teil des Pakets Diffutils
Aufruf
Optionen
Unix | GNU | Parameter | Beschreibung |
---|---|---|---|
Parameter
Umgebungsvariablen
Exit-Status
Anwendung
diff Datei1 Datei2
Will man nur wissen ob eine Datei sich inhaltlich von einer anderen Datei unterscheidet, kann der Parameter q verwendet werden:
diff -q Datei1 Datei2
Unterscheiden sich die Dateien, gibt diff eine entsprechende Meldung aus, ansonsten erfolgt keine Ausgabe. Dateien datei1 und datei2 sind verschieden.
Ohne den Parameter q zeigt diff die Unterschiede an, das sieht zum Beispiel so aus
diff beispiel2 beispiel1
1,2c1,2
< Das ist ein Beispieltext für einen Blogartikel.
< Diese Datei heisst beispiel2.
---
> Das hier ist ein Beispieltext.
> Diese Datei heisst beispiel1.
6C6
< Nicht eingerückter Text.
---
> Eingerückter Text.
8A9,10
>
> Mit noch mehr Text.
Diff zeigt immer an, was man in der zweiten Datei ändern müsste, damit sie der ersten Datei entspricht.
Die erste Zeile (1,2c1,2) bedeutet: Zeile 1 und Zeile 2 der zweiten Datei müssen verändert (c steht für change, das englische Wort für Ändern) werden, damit sie Zeile 1 und 2 der ersten Datei entsprechen. Außerdem wird der Inhalt der Zeilen angezeigt, so sieht man gleich was man ändern müsste. |
Datei:Grafik18.png |
Außer c für change gibt es noch a, das steht für Anhängen (append), und d für Löschen (delete). 8a9,10 bedeutet also, das hinter Zeile 8 noch Text eingefügt werden muss, nämlich die Zeilen 9 und 10 der zweiten Datei.
Ansicht ändern
Es gibt auch noch zwei andere Ausgabeformate. Das eine ist das Kontext-Format, dabei werden zu jeder Zeile, die verändert werden muss, auch noch die vorangehenden und folgenden 3 Zeilen angezeigt.
Die ersten beiden Zeilen geben an, welche Dateien verglichen werden, und das Inhalte aus der ersten Datei mittels Sternchen (***) und Inhalte aus der zweiten Zeile mittels Bindestrichen (---) gekennzeichnet werden.
diff -c beispiel2 beispiel1
*** beispiel2 </nowiki> 2009-05-12 22:01:52.000000000 +0200
--- beispiel1 2009-05-12 20:26:48.000000000 +0200
<nowiki>***************</nowiki>
<nowiki>*** 1,8 ****</nowiki>
! Das ist ein Beispieltext für einen Blogartikel.
! Diese Datei heisst beispiel2.
Lorem ipsum.
! Nicht eingerückter Text.
Hier geht es noch weiter.
--- 1,10 ----
! Das hier ist ein Beispieltext.
! Diese Datei heisst beispiel1.
Lorem ipsum.
! Eingerückter Text.
Hier geht es noch weiter.
+
+ Mit noch mehr Text.
Änderungen werden durch ein Ausrufezeichen, hinzuzufügende Zeilen mit einem Plus, zu entfernende Zeilen mit einem Minus gekennzeichnet.
Außerdem ist es möglich die Inhalte der beiden Dateien nebeneinander anzuzeigen.
diff -y beispiel2 beispiel1
Das ist ein Beispieltext für einen Blogartikel. | Das hier ist ein Beispieltext.
Diese Datei heisst beispiel2. | Diese Datei heisst beispiel1.
Lorem ipsum. Lorem ipsum.
Nicht eingerückter Text. | Eingerückter Text.
Hier geht es noch weiter. Hier geht es noch weiter.
>
> Mit noch mehr Text.
Was kann diff noch?
Möchte man drei Dateien miteinander vergleichen kann man anstatt diff den Befehl diff3 verwenden.
diff3 beispiel1 beispiel2 beispiel3
<nowiki>====1</nowiki>
1:1,2c
Das hier ist ein Beispieltext.
Diese Datei heisst beispiel1.
2:1,2c
3:1,2c
Das ist ein Beispieltext für einen Blogartikel.
Diese Datei heisst beispiel2.
Es ist auch möglich mit diff den Inhalt von Verzeichnissen zu vergleichen, diff zeigt dann an, welche Dateien nur in einem der beiden Verzeichnisse existieren. Der Parameter r weist diff an, auch Unterverzeichnisse zu überprüfen.
diff -r verz1 verz2
Nur in verz1: datei3.
Wenn man längere Texte miteinander vergleicht und die Ausgabe nicht mehr auf den Bildschirm passt kann man sie auch an ein Programm wie less übergeben:
diff datei1 datei2 | less
Anschließend kann man bequem durch die Ausgabe von diff scrollen.
Beispiele
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
Zuerst gibt diff an, in welcher Zeile sich die Unterschiede befinden. Zeilen mit < sind in der ersten Datei vorhanden und Zeilen mit > in der zweiten.
- 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
Patchdatei erstellen
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 (beispielsweise mit patch) angewandt werden.
Folgende Optionen von diff sind außerdem noch für das Erstellen einer Patchdatei interessant:
-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 |
Beispiele
diff -uNr ORIGINALDATEI VERBESSERTE_DATEI > DIFFDATEI.diff
Die Datei '''DIFFDATEI.diff''' würde dann in etwa so aussehen
<syntaxhighlight lang="bash" line>
--- 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:
<syntaxhighlight lang="bash" highlight="1" line>
diff -uNr ORDNER1/DATEI3 ORDNER2/DATEI3 --- ORDNER1/DATEI3 +++ ORDNER2/DATEI3 @@ -0,0 +1,5 @@ + Unterschied 1 + Unterschied 2 + Unterschied 3 + Unterschied 4 + Unterschied 5
</syntaxhighlight>
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.
Problembehebung
Konfiguration
Dateien
Datei | Beschreibung |
---|---|
Anhang
Siehe auch
Dokumentation
- Man-Page
- Info-Page
Links
Projekt
Weblinks