Tun:
diff -r -X <ignore-list> <src-dir> <dest-dir>
scheint keine diff
ignorierten Eingaben zu machen , <ignore-list>
wenn sie von der Form sind <dir>/<file>
.
Einträge des Formulars <file
> werden jedoch berücksichtigt. Dies ist ein Problem, da ich möglicherweise mehrere Dateien <file>
in verschiedenen Unterverzeichnissen habe, von denen einige nicht ignoriert werden sollen.
Es scheint auch nicht viele Informationen bezüglich der Mustersyntax in der Manpage zu geben diff
. Soweit ich weiß, ist es nur der Basisname einer Datei, die von diff berücksichtigt wird (siehe http://forums.gentoo.org/viewtopic-t-889788-start-0.html, wenn Sie interessiert sind).
diff
die--exclude
Option ist so beschissen ...Antworten:
Verzeichnisse auflisten sollte funktionieren; zB hier ist, was ich in einem Skript verwendet habe (unter der Annahme, Gnu Diff),
... ignoriert den Inhalt von
.svn
und.git
dirs, aber auch einzelne Dateien mit dem Namen*.zip
/*.gz
/ etc.Bearbeiten: Um Pfade des Formulars,
dir_a/file1
aber immer nochdiff
Dateien mit demselben Basisnamen zu filtern , wie z. B.dir_b/file1
oderdir_a/b/file1
, muss eine Liste der Dateiendiff
erstellt werden (z. B. mithilfe vonfind
), und die zu vergleichende Datei muss aus diesen Pfaden abgeleitet werden. zB gegebenSie generieren die Liste der zu vergleichenden Dateien, ohne beispielsweise
*/a/2.txt
andere Dateien mit dem Namen zu vergleichen2.txt
. "Finde" einfach alle Dateien außerONE/a/2.txt
(ein regulärer Ausdruck kann auch hier verwendet werden, wie zum Beispiel.*/a/2.txt
)die in der Tat ignoriert
ONE/a/2.txt
(undTWO/a/2.txt
), vergleicht aber immer noch die anderen genannten Dateien2.txt
:Bearbeiten: Oder, mehr Spaß mit
find
(zusätzlicher Spaß als Übung für den Leser), wählen Sie die Dateien oder Verzeichnisse aus, die Sie ausschließen möchten, und danndiff
alles andere:Das obige Beispiel schließt die spezifische Datei "{top} /a/2.txt", ein beliebiges Verzeichnis mit dem Namen "b" aus und alles andere ist anders. (Anstelle von "
-name b
" einfach könnte man auch "-regex '.*/b'
" - not, no trailing "/" verwenden.)quelle
exclude
Muster werden mit dem Basisnamen der Dateien abgeglichen (gemäß gnu.org/software/diffutils/manual/html_node/… ). Pfade funktionieren nicht (wie infoo/bar.txt
). Dazu müssen Sie wahrscheinlichfind
die Liste der Dateinamen erstellen und den Pfad zu der zu vergleichenden Datei ableiten.diff
basename
find
, aber wenn die Eingabediff
ein Verzeichnis enthält, werden die Dateien in diesem Verzeichnis durchsucht und verglichen. Einige dieser Dateien müssen möglicherweise ignoriert werden zurück zu Platz 1.Ich hatte das gleiche Problem, also habe ich einen Patch für erstellt
diff
. Der Patch muss noch akzeptiert werden, aber Sie können Ihre eigene Versiondiff
mit dem Patch erstellen oder unter Arch Linux mit einem AUR-Paket installieren .Hier ist der
diff
Patch.quelle
Um Verzeichnis auszuschließen
directory/sub-directory
, benutze ichObwohl es für einen einzelnen Ausschluss funktionieren sollte, sollte es für eine lange Ignorierliste nicht möglich sein, wie Sie es getan haben.
quelle
quelle