Zum Inhalt springen

Diff: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „http://“ durch „https://“
K Textersetzung - „line>“ durch „line copy>“
 
Zeile 7: Zeile 7:


== Aufruf ==
== Aufruf ==
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>
</syntaxhighlight>


Zeile 26: Zeile 26:


== Anwendung ==
== Anwendung ==
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff Datei1 Datei2
diff Datei1 Datei2
</syntaxhighlight>
</syntaxhighlight>


Will man nur wissen ob eine Datei sich inhaltlich von einer anderen Datei unterscheidet, kann der Parameter <tt>q</tt> verwendet werden:
Will man nur wissen ob eine Datei sich inhaltlich von einer anderen Datei unterscheidet, kann der Parameter <tt>q</tt> verwendet werden:
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff -q Datei1 Datei2
diff -q Datei1 Datei2
</syntaxhighlight>
</syntaxhighlight>
Zeile 38: Zeile 38:


Ohne den Parameter q zeigt diff die Unterschiede an, das sieht zum Beispiel so aus
Ohne den Parameter q zeigt diff die Unterschiede an, das sieht zum Beispiel so aus
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff beispiel2 beispiel1
diff beispiel2 beispiel1
  1,2c1,2
  1,2c1,2
Zeile 69: Zeile 69:


Die ersten beiden Zeilen geben an, welche Dateien verglichen werden, und das Inhalte aus der ersten Datei mittels Sternchen (<tt><nowiki>***</nowiki></tt>) und Inhalte aus der zweiten Zeile mittels Bindestrichen (<tt>---</tt>) gekennzeichnet werden.
Die ersten beiden Zeilen geben an, welche Dateien verglichen werden, und das Inhalte aus der ersten Datei mittels Sternchen (<tt><nowiki>***</nowiki></tt>) und Inhalte aus der zweiten Zeile mittels Bindestrichen (<tt>---</tt>) gekennzeichnet werden.
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff -c beispiel2 beispiel1
diff -c beispiel2 beispiel1
  *** beispiel2 </nowiki>  2009-05-12 22:01:52.000000000 +0200
  *** beispiel2 </nowiki>  2009-05-12 22:01:52.000000000 +0200
Zeile 99: Zeile 99:


Außerdem ist es möglich die Inhalte der beiden Dateien nebeneinander anzuzeigen.
Außerdem ist es möglich die Inhalte der beiden Dateien nebeneinander anzuzeigen.
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff -y beispiel2 beispiel1
diff -y beispiel2 beispiel1
  Das ist ein Beispieltext für einen Blogartikel.              | Das hier ist ein Beispieltext.
  Das ist ein Beispieltext für einen Blogartikel.              | Das hier ist ein Beispieltext.
Zeile 115: Zeile 115:


Möchte man drei Dateien miteinander vergleichen kann man anstatt diff den Befehl diff3 verwenden.
Möchte man drei Dateien miteinander vergleichen kann man anstatt diff den Befehl diff3 verwenden.
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff3 beispiel1 beispiel2 beispiel3
diff3 beispiel1 beispiel2 beispiel3
  <nowiki>====1</nowiki>
  <nowiki>====1</nowiki>
Zeile 128: Zeile 128:


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.
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.
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff -r verz1 verz2
diff -r verz1 verz2
  Nur in verz1: datei3.
  Nur in verz1: datei3.
Zeile 134: Zeile 134:


Wenn man längere Texte miteinander vergleicht und die Ausgabe nicht mehr auf den Bildschirm passt kann man sie auch an ein Programm wie <tt>less</tt> übergeben:
Wenn man längere Texte miteinander vergleicht und die Ausgabe nicht mehr auf den Bildschirm passt kann man sie auch an ein Programm wie <tt>less</tt> übergeben:
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff datei1 datei2 | less
diff datei1 datei2 | less
</syntaxhighlight>
</syntaxhighlight>
Zeile 141: Zeile 141:


=== Beispiele ===
=== Beispiele ===
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff -q DATEI1 DATEI2
diff -q DATEI1 DATEI2
  Dateien DATEI1 und DATEI2 unterscheiden sich
  Dateien DATEI1 und DATEI2 unterscheiden sich
Zeile 157: Zeile 157:


; Vergleichen von Ordnern
; Vergleichen von Ordnern
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff -s ORDNER1 ORDNER2
diff -s ORDNER1 ORDNER2
  Dateien ORDNER1/DATEI1 und ORDNER2/DATEI1 sind identisch
  Dateien ORDNER1/DATEI1 und ORDNER2/DATEI1 sind identisch
Zeile 184: Zeile 184:


=== Beispiele ===
=== Beispiele ===
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff -uNr ORIGINALDATEI VERBESSERTE_DATEI > DIFFDATEI.diff
diff -uNr ORIGINALDATEI VERBESSERTE_DATEI > DIFFDATEI.diff


Die Datei '''DIFFDATEI.diff''' würde dann in etwa so aussehen
Die Datei '''DIFFDATEI.diff''' würde dann in etwa so aussehen
<syntaxhighlight lang="bash" line>
<syntaxhighlight lang="bash" line copy>
  --- a/ORIGINALDATEI
  --- a/ORIGINALDATEI
  +++ b/VERBESSERTE_DATEI
  +++ b/VERBESSERTE_DATEI
Zeile 207: Zeile 207:
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 <tt>+</tt> sind dazugekommen, Zeilen mit <tt>-</tt> weggenommen und Zeilen mit einem Leerzeichen "<tt> </tt>" gleichgeblieben.
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 <tt>+</tt> sind dazugekommen, Zeilen mit <tt>-</tt> weggenommen und Zeilen mit einem Leerzeichen "<tt> </tt>" gleichgeblieben.


<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
diff -uNr ORDNER1 ORDNER2 > DIFFORDNER.diff  
diff -uNr ORDNER1 ORDNER2 > DIFFORDNER.diff  


Der Inhalt der Datei DIFFORDNER.diff:  
Der Inhalt der Datei DIFFORDNER.diff:  
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>
</syntaxhighlight>
  diff -uNr ORDNER1/DATEI3 ORDNER2/DATEI3
  diff -uNr ORDNER1/DATEI3 ORDNER2/DATEI3

Aktuelle Version vom 11. Mai 2025, 13:41 Uhr

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

  1. https://www.gnu.org/software/diffutils/

Weblinks