Vous pouvez également utiliser find avec -exec pour appeler diff :
cd /destination/dir/1
find . -name *.xml -exec diff {} /destination/dir/2/{} \;
L'absence d'un --include complémentaire ... .
Nous pouvons faire une solution de contournement, un fichier d'exclusion avec tous les fichiers mais ce que nous voulons inclure. Nous créons donc file1
avec une recherche de tous les fichiers qui n'ont pas d'extensions que nous voulons inclure, sed
attrapez le nom du fichier et c'est juste :
diff --exclude-from=file1 PATH1/ PATH2/
Par exemple :
find PATH1/ -type f | grep --text -vP "php$|html$" | sed 's/.*\///' | sort -u > file1
diff PATH1/ PATH2/ -rq -X file1
Tiré de (une version de) la page de manuel :
-x PAT --exclude=PAT
Exclude files that match PAT.
-X FILE --exclude-from=FILE
Exclude files that match any pattern in FILE.
Il ressemble donc à -x
n'accepte qu'un seul modèle lorsque vous le signalez, mais si vous mettez tous les modèles que vous souhaitez exclure dans un fichier (vraisemblablement un par ligne), vous pouvez utiliser le deuxième indicateur comme suit :
$ diff /destination/dir/1 /destination/dir/2 -r -X exclude.pats
où exclude.pats est :
*.jpg
*.JPG
*.xml
*.XML
*.png
*.gif
Vous pouvez spécifier -x
plus d'une fois.
diff -x '*.foo' -x '*.bar' -x '*.baz' /destination/dir/1 /destination/dir/2
Dans la section Comparaison des répertoires de info diff
(sur mon système, je dois faire info -f /usr/share/info/diff.info.gz
):
Pour ignorer certains fichiers lors de la comparaison des répertoires, utilisez l'option '-xPATTERN' ou '--exclude=PATTERN'. Cette option ignore tous les fichiers ou sous-répertoires dont les noms de base correspondent au modèle du shell PATTERN. Contrairement au shell, un point au début de la base d'un nom de fichier correspond à un caractère générique au début d'un modèle. Vous devez mettreMOTIF entre guillemets afin que le shell ne le développe pas. Par exemple, l'option -x '*.[ao]' ignore tout fichier dont le nom se termine par '.a' ou '.o'.
Cette option s'accumule si vous la spécifiez plus d'une fois. Par exemple, en utilisant les options -x 'RCS' -x '*,v' ignore tout fichier ou sous-répertoire dont le nom de base est 'RCS' ou se termine par ',v'.