Dateien vergleichen mit diff, Kompare und Meld

Zwei Dateien werden mit Kompare verglichen

Ob Konfigurationsdateien, Quelltexte oder andere Dokumente, es kommt oft vor, dass man zwei Versionen desselben Textes miteinander vergleichen möchte. Manchmal will man auch nur herausfinden ob zwei Dateien genau denselben Inhalt haben. Dateien manuell miteinander zu vergleichen kann allerdings ziemlich mühselig sein. Programme wie diff, Kompare oder Meld können einem diese Arbeit erleichtern.

Dateien vergleichen mit diff

Mit dem Programm diff kann man auf der Kommandozeile Dateien vergleichen. Die Befehlssyntax ist einfach:

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.
Erklärung der Ausgabe von diff

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.

Andere Ansicht

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   2009-05-12 22:01:52.000000000 +0200
--- beispiel1   2009-05-12 20:26:48.000000000 +0200
***************
*** 1,8 ****
! 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
====1
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.

Etwas übersichtlicher: Kompare

KompareKDE-Benutzer können auch das Programm Kompare verwenden um zwei Dateien miteinander zu vergleichen. Kompare zeigt beide Dateien nebeneinander an, Unterschiede werden farblich hervorgehoben. Text mit rotem Hintergrund muss verändert werden, solcher mit blauem Hintergrund muss hinzugefügt, und solcher mit grünem Hintergrund muss entfernt werden, damit die zweite Datei der ersten entspricht. Es ist auch möglich einzelne oder alle Abweichungen zu übernehmen, bzw. die Texte manuell zusammenzuführen.

Kann noch etwas mehr: Meld

Meld vergleicht zwei DateienMeld ist ebenfalls ein grafisches Programm zum Vergleichen von Dateien. Die Funktionsweise ist ähnlich der von Kompare. Mit einem Klick auf die Pfeile neben den Unterschieden kann man die Textstelle entweder von der ersten Datei in die Zweite, oder umgekehrt übernehmen. Der Unterschied zu Kompare ist aber, dass die beiden Dateien in einem Texteditor dargestellt werden, und das man sie auch manuell noch weiter bearbeiten kann. Das ist sehr nützlich, z.B. für den Fall das man bestimmte Änderungen nur teilweise übernehmen möchte.

Informationen

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (3 Bewertungen, Durchschnitt: 5,00 von 5)
Loading ... Loading ...
Kategorie: Linux
Ansichten: 13.262

Kommentare

Bisher wurden 2 Kommentare geschrieben.

  • mensch sagt:

    Habe WinMerge gesucht, aber das ist ja gar nicht für Linux. Dein Beitrag hat mir geholfen, danke.

  • Se sagt:

    Hi,
    ich möchte Dateien vergleichen, die inhaltlich gleich sind, nur manchmal die Zeilen nicht an den selben Stellen sind. Sowas soll als kein Unterschied gelten. Welches Prog kann sowas?

Kommentar schreiben

XHTML: Folgende Elemente sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Angetrieben durch Wordpress Thema erstellt von Antu