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.