Das DIFF-Dienstprogramm funktioniert für 2 Dateien. Wie kann man mehr als 2 Dateien gleichzeitig vergleichen?


84

Das Dienstprogramm Diff funktioniert also genau so, wie ich es für 2 Dateien möchte, aber ich habe ein Projekt, das Vergleiche mit mehr als 2 Dateien gleichzeitig erfordert, möglicherweise bis zu 10 gleichzeitig. Dies erfordert auch, dass alle diese Dateien nebeneinander liegen. Meine Forschung hat nicht wirklich etwas ergeben, vimdiff scheint das beste zu sein, mit der Fähigkeit, 4 auf einmal zu vergleichen.

Meine Frage: Gibt es ein Dienstprogramm zum Vergleichen von mehr als 2 Dateien gleichzeitig oder eine Möglichkeit, diff / vimdiff zu hacken, damit mehrere Vergleiche durchgeführt werden können? Die Dateien, die ich vergleichen werde, sind relativ kurz, daher sollte es nicht zu langsam sein.

Danke im Voraus!

Antworten:


111

Das Anzeigen von 10 Dateien nebeneinander und das Hervorheben von Unterschieden ist mit Diffuse problemlos möglich . Geben Sie einfach alle Dateien in der Befehlszeile wie folgt an:

diffuse 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt


1
Wow das ist großartig! Vielen Dank für die Antwort auch spät, ich brauchte noch die Hilfe.
Javed Ahamed

1
Wie heißt diese Art von Vergleich?
leeand00

4
Fantastisches Werkzeug; hat mir nur geholfen, ein ärgerliches Problem zu lösen. Ich weiß, dass es eine ältere Antwort ist, aber danke!
SeanKilleen

Tausendmal danke! Hat viel geholfen, kleine Unterschiede in einer Reihe von kopierten Dateien herauszufinden.
Trass3r

1
@Gruber - Ich muss den Link zu einem schlechten Zeitpunkt treffen - Ich habe meinen Kommentar entfernt
Combatc2

28

Vim kann das schon:

vim -d file1 file2 file3

Normalerweise sind Sie jedoch auf 4 Dateien beschränkt. Sie können dies jedoch ändern, indem Sie eine einzelne Zeile in der Quelle von Vim ändern. Die Konstante DB_COUNTdefiniert die maximale Anzahl von diff ed Dateien, und es ist an der Spitze der definiert diff.cin Versionen 6.x und früher oder etwa zwei Drittel des Weges nach unten structs.hin den Versionen 7.0 und höher.


vimdiff oder vim -d können mindestens 4 Dateien gleichzeitig auf meinem Computer ausführen. weiß jemand, wie man das umgeht?
Javed Ahamed

Ich habe die Erwähnung in der Frage nicht bemerkt. Aktualisiert, um Anweisungen zum Ändern des Vim-Limits zu enthalten.
Noah Medling

Hey, weißt du, wie man tatsächlich zu structs.h oder diff.c kommt? Ich kann den vim-Quellcode unter Win oder Linux nicht finden.
Javed Ahamed

vim scheint nicht in der Lage zu sein, Verzeichnisvergleiche für mehr als zwei Verzeichnisse durchzuführen, was die Nützlichkeit einschränkt. Eine weitere Einschränkung besteht darin, dass beim Vergleich der Dateien nur die linke Seite der Datei angezeigt wird und keine Bildlaufleisten vorhanden sind, um alles anzuzeigen. Und es gibt keine GUI-Methode, um Änderungen hin und her zu verschieben.
Jereme Guenther

7

diffhat eingebaute Option --from-fileund --to-file, die einen Operanden mit allen anderen vergleicht.

   --from-file=FILE1
          Compare FILE1 to all operands.  FILE1 can be a directory.

   --to-file=FILE2
          Compare all operands to FILE2.  FILE2 can be a directory.

Ich wünschte, ich könnte dies mit Prozessersetzung anstelle von echten Dateipfaden zum Laufen bringen.
Jan Kyu Peblik

1
@JanKyuPeblik Wenn Sie zsh verwenden, überprüfen Sie die Form = (...) der Prozessersetzung, die die Ausgabe in eine temporäre Datei schreibt und auf den Namen dieser temporären
Eric Freese

2

Kasse "Beyond Compare": http://www.scootersoftware.com/

Sie können damit ganze Dateiverzeichnisse vergleichen und es sieht so aus, als ob es auch unter Linux läuft.


1
diff -r vergleicht auch ganze Verzeichnisse von Dateien, vergleicht jedoch immer nur die Dateien aus einem Verzeichnis mit den Dateien aus dem anderen Verzeichnis
reinierpost

6
Beyond Compare ist ein großartiges Tool, das ich ständig verwende, um Zusammenführungskonflikte zu lösen. Es ist jedoch nicht das richtige Werkzeug für diesen Job, da nur zwei Dateien miteinander oder mit einem gemeinsamen Vorfahren verglichen werden können.
Superole

Entschuldigung für -1, aber hier geht es darum, viele Dateien miteinander zu vergleichen.
Manohar Reddy Poreddy

1

Wenn Sie mehrere Diffs basierend auf einer Datei ausführen, können Sie wahrscheinlich versuchen, ein Skript mit einer for-Schleife zu schreiben, die durch jedes Verzeichnis ausgeführt und das Diff ausgeführt wird. Obwohl es nicht nebeneinander wäre, könnte man sie zumindest schnell vergleichen. hoffe das hat geholfen.


Ja, aber wenn ich zum Beispiel 3 Dateien vergleichen würde, würde ich wollen, dass sie sich alle mit den anderen 2 Dateien unterscheiden, da diff diese Neuanordnung vornimmt, um zu sehen, wo sie übereinstimmen.
Javed Ahamed

Ich habe diesen Befehl gefunden, der bei Ihrem Skript helfen könnte. Er heißt diff3 und ist angeblich ein Dienstprogramm zum Vergleichen von drei Dateien. linux.about.com/library/cmd/blcmdl1_diff3.htm Die Windows-Version finden Sie hier gnuwin32.sourceforge.net/packages/diffutils.htm
Benjamin Neil

0

Nicht die Beantwortung der Hauptfrage, aber hier ist etwas ähnlich zu , was Benjamin Neil vorgeschlagen hat , aber diff ing alle Dateien:

Speichern Sie die Dateinamen in einem Array und durchlaufen Sie dann die Kombinationen aus Größe zwei und diff (oder machen Sie, was Sie wollen).

files=($(ls -d /path/of/files/some-prefix.*))     # Array of files to compare
max=${#files[@]}                                  # Take the length of that array
for ((idxA=0; idxA<max; idxA++)); do              # iterate idxA from 0 to length
  for ((idxB=idxA + 1; idxB<max; idxB++)); do     # iterate idxB + 1 from idxA to length
    echo "A: ${files[$idxA]}; B: ${files[$idxB]}" # Do whatever you're here for.
  done
done

Abgeleitet von der Antwort von @ charles-duffy : https://stackoverflow.com/a/46719215/1160428


0

Es gibt einen einfachen und guten Weg, dies zu tun = GREP.

Abhängig von der Größe des Texts können Sie ihn kopieren und einfügen oder die Eingabe der Datei in den Befehl grep umleiten. Wenn Sie ein grep -vir / path erstellen, um eine umgekehrte Suche durchzuführen, oder ein grep -ir / path. Dies ist mein Weg für Zertifizierungsprüfungen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.