Comment avez-vous diff un répertoire pour uniquement les fichiers d'un type spécifique?
J'ai une question à propos de la commande diff
si je veux un récursif répertoire diff mais seulement pour un type de fichier spécifique, comment le faire?
J'ai essayé d'utiliser l'option exclure, mais ne pouvez utiliser qu'un seul motif:
$ diff /destination/dir/1 /destination/dir/2 -r -x *.xml
avec la commande je ne peut exclure type de fichier xml, même si il y a des fichiers dans le dossier type d'image (png
, gif
, jpg
), txt
, php
, etc
comment diff seulement certains types de fichiers.
- stackoverflow.com/q/10131908/2707864
- Alors, êtes-vous essayer de diff fichiers de type particulier ou d'exclure ces fichiers à partir de différentiation? La question n'est pas corrélée à la description..
Vous devez vous connecter pour publier un commentaire.
Vous pouvez spécifier
-x
plus d'une fois.De la Comparaison de Répertoires section de
info diff
(sur mon système, j'ai à faireinfo -f /usr/share/info/diff.info.gz
):Prises à partir de ( une version de) la page de man:
De sorte qu'il ressemble
-x
n'accepte qu'un seul motif que vous le rapport, mais si vous mettez tous les modèles que vous souhaitez exclure dans un fichier (sans doute l'un par ligne), vous pouvez utiliser le deuxième drapeau de la sorte:où exclure.pats est:
find . -type f -not -name '*.<my-ext>' | xargs -I% basename '%' | awk -F . 'NF > 1 { print "*." $NF}; NF == 1 { print $NF }' | sort | uniq > exclude.pats
find . -not -name "*.c" -and -not -name "*.h" -and -type f -print0 | xargs -0 basename | grep -E '.*\..+' | sed 's/\./\//g' | xargs basename | xargs printf '*.%s\n' | sort | uniq > X-FILE
je veux croire qu'une aide, peut-être sur Linux. (Dans cet exemple, un seul-name "*.[ch]"
est correct, mais ce n'est pas très illustratif)Vous pouvez également utiliser le trouver avec -exec pour appeler diff:
L'absence de complémentaire --include ... .
Nous pouvons faire une solution de contournement, exclure un dossier avec tous les fichiers, mais ce que nous voulons inclure. Nous avons donc créer fichier1 avec un rechercher tous les fichiers qui n'ont pas d'extensions que nous voulons comprendre , sed attraper le nom de fichier et est juste : diff --exclude-from=fichier1 PATH1/CHEMIN2/, exemple:
find PATH1/ -type f | grep --text -v -e "php$" -e html$" | sed 's/.*\///' | sort -u > file1 diff PATH1/ PATH2/ -rq -X file1
Dans le cas où vous trouvez qu'il est commode de le faire, vous pouvez utiliser les éléments suivants
Makefile
. Il suffit d'exécuter: "patch"J'ai utilisé la commande suivante pour trouver le diff de toutes les
*.tmpl
des fichiers entreDIR1
etDIR2
. Dans mon cas, cela n'a pas produit de faux positifs, mais il peut, pour vous, en fonction du contenu de votre DIRS.diff --brief DIR1 DIR2 | grep tmpl
L'absence de complémentaire --include rend nécessaire l'utilisation de ces alambiqué heuristique des modèles comme
à trouver (surtout) les fichiers java!
Si vous voulez varier les sources et faire simple:
Supprimer le dernier grep si vous voulez obtenir les fichiers qui n'existent que dans l'un des chemins.