Fichiers Diff présents dans deux répertoires différents
J'ai deux répertoires avec la même liste de fichiers. J'ai besoin de comparer tous les fichiers présents dans les deux répertoires en utilisant la commande diff
. Existe-t-il une option de ligne de commande simple pour le faire, ou dois-je écrire un script shell pour obtenir la liste des fichiers, puis les parcourir?
7 réponses
Vous pouvez utiliser la commande diff
pour cela:
diff -bur folder1/ folder2/
Cela produira un diff récursif qui ignore les espaces, avec un contexte unifié:
- B signifie ignorer les espaces
- u drapeau signifie unifiée contexte (3 lignes avant et après)
- R drapeau signifie récursif
Si vous n'êtes intéressé que par les fichiers qui diffèrent, vous pouvez utiliser:
diff -qr dir_one dir_two | sort
L'Option " q "affichera uniquement les fichiers qui diffèrent, mais pas le contenu qui diffère, et "sort" arrangera la sortie par ordre alphabétique.
Diff a une option -r
qui est destinée à faire exactement cela.
diff -r dir1 dir2
diff
peut non seulement comparer deux fichiers, il peut, en utilisant l'option -r
, parcourir des arbres de répertoires entiers, en vérifiant récursivement les différences entre les sous-répertoires et les fichiers qui se produisent à des points comparables dans chaque arbre.
$ man diff
...
-r --recursive
Recursively compare any subdirectories found.
...
Si C'est GNU diff, alors vous devriez simplement pouvoir le pointer sur les deux répertoires et utiliser l'option-R.
Sinon, essayez d'utiliser
for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done
N.B. comme L'a souligné Dennis dans la section commentaires, vous n'avez pas vraiment besoin de faire la substitution de commande sur le ls. Je le fais depuis si longtemps que je le fais à peu près sur le pilote automatique et en substituant la commande dont j'ai besoin pour obtenir ma liste de fichiers à comparer.
Aussi, j'ai oublié d'ajouter que je fais' \ ls ' Temporairement désactivez Mon alias de ls à GNU ls afin que je perde les informations de formatage des couleurs de la liste retournée par GNU ls.
Voici un script pour montrer les différences entre les fichiers dans deux dossiers. Cela fonctionne récursivement. Changer dir1 et dir2.
(search() { for i in $1/*; do [ -f "$i" ] && (diff "$1/${i##*/}" "$2/${i##*/}" || echo "files: $1/${i##*/} $2/${i##*/}"); [ -d "$i" ] && search "$1/${i##*/}" "$2/${i##*/}"; done }; search "dir1" "dir2" )
Essayez ceci:
diff -rq /path/to/folder1 /path/to/folder2