diff

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
  2. Aufruf
  3. Patchdatei erstellen
  4. Links

Wiki/Icons/terminal.png 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.

Installation

diff ist Teil der GNU Diffutils

und in jeder Ubuntu- (bzw. Linux-)Installation enthalten.

Aufruf

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

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

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.

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 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

Beispiele

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.