Verzeichnisse auflisten sollte funktionieren; zB hier ist, was ich in einem Skript verwendet habe (unter der Annahme, Gnu Diff),
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
... ignoriert den Inhalt von .svnund .gitdirs, aber auch einzelne Dateien mit dem Namen *.zip/ *.gz/ etc.
Bearbeiten: Um Pfade des Formulars, dir_a/file1aber immer noch diffDateien mit demselben Basisnamen zu filtern , wie z. B. dir_b/file1oder dir_a/b/file1, muss eine Liste der Dateien differstellt werden (z. B. mithilfe von find), und die zu vergleichende Datei muss aus diesen Pfaden abgeleitet werden. zB gegeben
$ find ONE TWO -type f -print
ONE/a/1.txt
ONE/a/2.txt
ONE/a/b/2.txt
TWO/a/1.txt
TWO/a/2.txt
TWO/a/b/2.txt
Sie generieren die Liste der zu vergleichenden Dateien, ohne beispielsweise */a/2.txtandere Dateien mit dem Namen zu vergleichen 2.txt. "Finde" einfach alle Dateien außer ONE/a/2.txt(ein regulärer Ausdruck kann auch hier verwendet werden, wie zum Beispiel .*/a/2.txt)
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
die in der Tat ignoriert ONE/a/2.txt(und TWO/a/2.txt), vergleicht aber immer noch die anderen genannten Dateien 2.txt:
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.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 dann diffalles andere:
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
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.)
diffdie--excludeOption ist so beschissen ...