343 votes

Diff fichiers 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 répertoires à l'aide de l' diff commande. Est-il une simple option de ligne de commande pour le faire, ou ce que je dois écrire un script shell pour obtenir la liste des fichiers, puis itérer à travers eux?

481voto

Laurent Etiemble Points 17360

Vous pouvez utiliser l' diff commande:

diff -bur folder1/ folder2/

Cela permettra de sortie récursive de diff qui ignorer les espaces, avec un système unifié de contexte.

141voto

Suresh Points 86

Si vous êtes uniquement intéressé à voir les fichiers qui diffèrent, vous pouvez utiliser:

diff -qr dir_one dir_two | tri

L'Option "q" affichera uniquement les fichiers qui diffèrent, mais pas le contenu qui diffèrent, et "trier" organisera une sortie par ordre alphabétique.

-- Suresh Vadali

23voto

codeRain Points 1449

Diff a une option -r qui est censé le faire.

diff -r dir1 dir2

11voto

miku Points 63392

diff ne peuvent pas seulement de comparer deux fichiers, il peut, à l'aide de la -r option, à pied tout le répertoire des arbres, de manière récursive, à la vérification des 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.

...

4voto

Rob Wells Points 21714

Si c'est GNU diff alors vous devriez juste être capable de le diriger vers les deux répertoires et utilisez l'option-r.

Sinon, essayez d'utiliser

for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done

N. B. Comme indiqué par Dennis dans la section des commentaires, vous n'avez pas besoin de faire de la substitution de commande sur la ls. J'ai fait cela depuis si longtemps que je suis plutôt de faire cela sur le pilote automatique et la substitution de la commande j'ai besoin d'obtenir ma liste de fichiers à des fins de comparaison.

Aussi j'ai oublié d'ajouter que je ne '\ls' pour désactiver temporairement mon alias de la commande ls pour GNU ls de sorte que je perds la couleur de mise en forme des informations à partir de la liste retournée par GNU ls.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X