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?

240
demandé sur Teun Zengerink 2010-01-07 14:25:54

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
338
répondu Laurent Etiemble 2017-01-19 16:14:27

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.

85
répondu Suresh 2014-10-31 16:09:08

Diff a une option -r qui est destinée à faire exactement cela.

diff -r dir1 dir2

17
répondu CodeRain 2010-01-07 11:30:02

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.

...
9
répondu miku 2010-01-07 11:28:53

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.

3
répondu Rob Wells 2010-01-07 12:55:23

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" )
0
répondu Evgeny Karpov 2016-02-17 14:02:37

Essayez ceci:

diff -rq /path/to/folder1 /path/to/folder2      
-2
répondu Sonali Birari 2017-06-06 18:00:02