Puoi anche usare find con -exec per chiamare diff:
cd /destination/dir/1
find . -name *.xml -exec diff {} /destination/dir/2/{} \;
La mancanza di un --include complementare ... .
Possiamo fare una soluzione alternativa, un file di esclusione con tutti i file tranne quello che vogliamo includere. Quindi creiamo file1
con un trova tutti i file che non hanno estensioni che vogliamo includere, sed
cattura il nome del file ed è solo :
diff --exclude-from=file1 PATH1/ PATH2/
Ad esempio:
find PATH1/ -type f | grep --text -vP "php$|html$" | sed 's/.*\///' | sort -u > file1
diff PATH1/ PATH2/ -rq -X file1
Preso da (una versione della) pagina man:
-x PAT --exclude=PAT
Exclude files that match PAT.
-X FILE --exclude-from=FILE
Exclude files that match any pattern in FILE.
Quindi sembra -x
accetta solo un modello come riportato, ma se metti tutti i modelli che vuoi escludere in un file (presumibilmente uno per riga) potresti usare il secondo flag in questo modo:
$ diff /destination/dir/1 /destination/dir/2 -r -X exclude.pats
dove exclude.pats è:
*.jpg
*.JPG
*.xml
*.XML
*.png
*.gif
Puoi specificare -x
più di una volta.
diff -x '*.foo' -x '*.bar' -x '*.baz' /destination/dir/1 /destination/dir/2
Dalla sezione Confronto tra directory di info diff
(sul mio sistema, devo fare info -f /usr/share/info/diff.info.gz
):
Per ignorare alcuni file durante il confronto delle directory, utilizzare l'opzione '-xPATTERN' o '--exclude=PATTERN'. Questa opzione ignora tutti i file o le sottodirectory i cui nomi di base corrispondono al pattern della shell PATTERN. A differenza della shell, un punto all'inizio della base di un nome di file corrisponde a un carattere jolly all'inizio di un pattern. Dovresti racchiudere PATTERN tra virgolette in modo che la shell non lo espanda. Ad esempio, l'opzione -x '*.[ao]' ignora qualsiasi file il cui nome termina con '.a' o '.o'.
Questa opzione si accumula se la specifichi più di una volta. Ad esempio, utilizzando le opzioni -x 'RCS' -x '*,v' ignora qualsiasi file o sottodirectory il cui nome di base è 'RCS' o termina con ',v'.