También puede usar find con -exec para llamar a diff:
cd /destination/dir/1
find . -name *.xml -exec diff {} /destination/dir/2/{} \;
La falta de un complemento --incluir ... .
Podemos hacer una solución alternativa, un archivo de exclusión con todos los archivos menos los que queremos incluir. Entonces creamos file1
con encontrar todos los archivos que no tienen las extensiones que queremos incluir, sed
captura el nombre del archivo y es solo:
diff --exclude-from=file1 PATH1/ PATH2/
Por ejemplo:
find PATH1/ -type f | grep --text -vP "php$|html$" | sed 's/.*\///' | sort -u > file1
diff PATH1/ PATH2/ -rq -X file1
Tomado de (una versión de) la página man:
-x PAT --exclude=PAT
Exclude files that match PAT.
-X FILE --exclude-from=FILE
Exclude files that match any pattern in FILE.
Entonces parece -x
solo acepta un patrón a medida que informa, pero si coloca todos los patrones que desea excluir en un archivo (presumiblemente uno por línea), podría usar la segunda bandera de esta manera:
$ diff /destination/dir/1 /destination/dir/2 -r -X exclude.pats
donde excluir.pats es:
*.jpg
*.JPG
*.xml
*.XML
*.png
*.gif
Puede especificar -x
más de una vez.
diff -x '*.foo' -x '*.bar' -x '*.baz' /destination/dir/1 /destination/dir/2
De la sección Comparación de directorios de info diff
(en mi sistema, tengo que hacer info -f /usr/share/info/diff.info.gz
):
Para ignorar algunos archivos al comparar directorios, use la opción '-xPATTERN' o '--exclude=PATTERN'. Esta opción ignora cualquier archivo o subdirectorio cuyos nombres base coincidan con el patrón de shell PATTERN. A diferencia del shell, un punto al comienzo de la base de un nombre de archivo coincide con un comodín al comienzo de un patrón. Debe incluir PATTERN entre comillas para que el shell no lo expanda. Por ejemplo, la opción -x '*.[ao]' ignora cualquier archivo cuyo nombre termine con '.a' o '.o'.
Esta opción se acumula si la especifica más de una vez. Por ejemplo, usando las opciones -x 'RCS' -x '*,v' ignora cualquier archivo o subdirectorio cuyo nombre base sea 'RCS' o termine con ',v'.