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!

Javed Ahamed
quelle

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


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

Noah Medling
quelle
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.
Pfirsich Wu
quelle
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.

Scott Anderson
quelle
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.

Benjamin Neil
quelle
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

anask
quelle
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.

user14565488
quelle