Sie können auch find mit -exec verwenden, um diff:
aufzurufencd /destination/dir/1
find . -name *.xml -exec diff {} /destination/dir/2/{} \;
Das Fehlen eines ergänzenden --include ... .
Wir können eine Problemumgehung durchführen, eine Exclude-Datei mit allen Dateien, außer den Dateien, die wir einschließen möchten. Also erstellen wir file1
mit einem alle Dateien finden, die keine Erweiterungen haben, die wir einschließen möchten, sed
Fangen Sie den Dateinamen und ist nur :
diff --exclude-from=file1 PATH1/ PATH2/
Zum Beispiel:
find PATH1/ -type f | grep --text -vP "php$|html$" | sed 's/.*\///' | sort -u > file1
diff PATH1/ PATH2/ -rq -X file1
Entnommen aus (einer Version von) der Manpage:
-x PAT --exclude=PAT
Exclude files that match PAT.
-X FILE --exclude-from=FILE
Exclude files that match any pattern in FILE.
Es sieht also aus wie -x
akzeptiert nur ein Muster, wenn Sie es melden, aber wenn Sie alle Muster, die Sie ausschließen möchten, in eine Datei schreiben (vermutlich eines pro Zeile), könnten Sie das zweite Flag so verwenden:
$ diff /destination/dir/1 /destination/dir/2 -r -X exclude.pats
Dabei ist „exclude.pats“:
*.jpg
*.JPG
*.xml
*.XML
*.png
*.gif
Sie können -x
angeben mehr als einmal.
diff -x '*.foo' -x '*.bar' -x '*.baz' /destination/dir/1 /destination/dir/2
Aus dem Abschnitt Verzeichnisse vergleichen von info diff
(Auf meinem System muss ich info -f /usr/share/info/diff.info.gz
ausführen ):
Um einige Dateien beim Vergleichen von Verzeichnissen zu ignorieren, verwenden Sie die Option „-xPATTERN“ oder „--exclude=PATTERN“. Diese Option ignoriert alle Dateien oder Unterverzeichnisse, deren Basisnamen dem Shell-Muster PATTERN entsprechen. Anders als in der Shell entspricht ein Punkt am Anfang der Basis eines Dateinamens einem Platzhalter am Anfang eines Musters. Sie sollten PATTERN in Anführungszeichen setzen, damit die Shell es nicht erweitert. Zum Beispiel die Option -x '*.[ao]' ignoriert alle Dateien, deren Name mit '.a' oder '.o' endet.
Diese Option wird kumuliert, wenn Sie sie mehr als einmal angeben. Verwenden Sie zum Beispiel die Optionen -x 'RCS' -x '*,v' ignoriert alle Dateien oder Unterverzeichnisse, deren Basisname 'RCS' ist oder auf ',v' endet.