Faire:
diff -r -X <ignore-list> <src-dir> <dest-dir>
ne semble pas faire diff
ignorer les entrées <ignore-list>
si elles sont de la forme <dir>/<file>
.
Les entrées du formulaire <file
> sont cependant prises en compte. C'est un problème car je pourrais avoir plusieurs fichiers nommés <file>
dans différents sous-répertoires, dont certains que je ne veux pas ignorer.
Il ne semble pas y avoir beaucoup d'informations concernant la syntaxe des modèles dans la page de manuel pour les diff
deux. D'après ce que je peux dire, c'est juste le nom de base d'un fichier qui est considéré par diff (voir http://forums.gentoo.org/viewtopic-t-889788-start-0.html si vous êtes intéressé).
diff
l'--exclude
option est tellement merdique ...Réponses:
La liste des répertoires devrait fonctionner; par exemple, voici ce que j'ai utilisé dans un script (en supposant que gnu diff),
... qui ignore le contenu de
.svn
et.git
dirs, mais aussi les fichiers individuels nommés*.zip
/*.gz
/ etc.Modifier: Afin de filtrer les chemins du formulaire
dir_a/file1
mais toujours desdiff
fichiers avec le même nom de base, tels quedir_b/file1
oudir_a/b/file1
, alors une liste de fichiers àdiff
générer devrait être (par exemple, en utilisantfind
), et le fichier à comparer dérivé de ces chemins; par exemple, étant donnévous générez la liste des fichiers à comparer, excluant par exemple
*/a/2.txt
mais toujours en comparant les autres fichiers nommés2.txt
. Il suffit de "trouver" tous les fichiers saufONE/a/2.txt
(une expression rationnelle peut également être utilisée ici, par exemple.*/a/2.txt
)qui en effet ignore
ONE/a/2.txt
(etTWO/a/2.txt
), mais compare toujours les autres fichiers nommés2.txt
:Modifier: Ou, plus amusant avec
find
(plaisir supplémentaire laissé comme exercice pour le lecteur), sélectionnez les fichiers ou répertoires à exclure , puisdiff
tout le reste:L'exemple ci-dessus exclut le fichier spécifique "{top} /a/2.txt", tout répertoire nommé "b" et tout le reste est différent. (Au lieu du simple "
-name b
", vous pouvez également utiliser "-regex '.*/b'
" - note, pas de "/" à la fin.)la source
exclude
motifs sont comparés au nom de base des fichiers (selon gnu.org/software/diffutils/manual/html_node/… ); les chemins ne fonctionneront pas (comme dansfoo/bar.txt
). Pour ce faire, vous devrez probablement exécuterfind
pour générer la liste des noms de fichiers et dériver le chemin d'accès au fichier à comparer.diff
, au lieu de simplement utiliserbasename
find
, si l'entrée dediff
contient un répertoire, il parcourra et comparera les fichiers dans ce répertoire et certains de ces fichiers devront peut-être être ignorés .... donc vous êtes retour à la case 1.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 dediff
avec le correctif ou l' installer sur Arch Linux avec un package AUR .Voici le
diff
patch.la source
Pour exclure le répertoire
directory/sub-directory
, j'utiliseCependant, bien que cela devrait fonctionner pour une seule exclusion, il ne devrait pas être possible pour une longue liste d'ignorer comme vous l'avez.
la source
la source