Les répertoires d'inscription devraient fonctionner; par exemple, voici ce que j'ai utilisé dans un script (en supposant que gnu diff),
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
...qui ignore le contenu de .svn et .git dirs, mais aussi des fichiers individuels nommés *.zip /*.gz /etc.
Modifier : Pour filtrer les chemins de la forme dir_a/file1 mais toujours diff fichiers avec le même nom de base, comme dir_b/file1 ou dir_a/b/file1 , puis une liste de fichiers à diff devrait être généré (par exemple, en utilisant find ), et le fichier à comparer dérivé de ces chemins ; par exemple, donné
$ 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
vous générez la liste des fichiers à comparer, en excluant par exemple */a/2.txt mais toujours en comparant d'autres fichiers nommés 2.txt . "Trouvez" simplement tous les fichiers sauf ONE/a/2.txt (une expression rationnelle peut également être utilisée ici, telle que .*/a/2.txt )
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
qui en fait ignore ONE/a/2.txt (et TWO/a/2.txt ), mais compare toujours les autres fichiers nommés 2.txt :
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt
Modifier : Ou plus amusant avec find (amusement supplémentaire laissé comme exercice pour le lecteur), sélectionnez les fichiers ou répertoires à exclure puis diff tout le reste :
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
L'exemple ci-dessus exclut le fichier spécifique "{top}/a/2.txt", tout répertoire nommé "b", et tout le reste est comparé. (Au lieu du simple "-name b " vous pouvez également utiliser "-regex '.*/b' " - notez qu'il n'y a pas de "/".)
J'ai eu le même problème alors j'ai créé un patch pour diff . Le correctif n'a pas encore été accepté, mais vous pouvez créer votre propre version de diff avec le correctif ou installez sur Arch Linux avec un package AUR.
Voici le diff correctif.
Pour exclure le répertoire directory/sub-directory , j'utilise
diff -r <src-dir> <dest-dir> | grep -v directory/sub-directory
Cependant, bien que cela devrait fonctionner pour une seule exclusion, cela ne devrait pas être possible pour une longue liste d'ignorés comme vous l'avez fait.