884 votes

Étant donné deux arborescences de répertoires, comment puis-je savoir quels sont les fichiers qui diffèrent par leur contenu ?

Si je veux trouver les différences entre deux arborescences de répertoires, je me contente généralement d'exécuter :

diff -r dir1/ dir2/

Cela permet de connaître exactement les différences entre les fichiers correspondants. Ce qui m'intéresse, c'est d'obtenir une liste des fichiers correspondants dont le contenu diffère. Je pensais qu'il suffirait de passer une option de ligne de commande à diff mais je n'ai rien trouvé sur la page de manuel.

Des suggestions ?

4 votes

1 votes

En ce qui concerne l'un des répertoires, comment obtenir uniquement les fichiers/répertoires qui se trouvent dans l'autre ?

0 votes

Utiliser dircmp sous unix (pas linux)

1281voto

Mark Loeser Points 4007

Essayez :

diff --brief --recursive dir1/ dir2/

Ou encore, avec les drapeaux courts -qr :

diff -qr dir1/ dir2/

Si vous souhaitez également voir les différences pour des fichiers qui n'existent peut-être pas dans l'un ou l'autre des deux répertoires :

diff --brief --recursive --new-file dir1/ dir2/  # with long options
diff -qrN dir1/ dir2/                            # with short flag aliases

16 votes

C'est une bonne chose. Mais plus court, c'est diff -qr dir1/ dir2/ et ma version étendue à diff -qr dir1/ dir2/ | grep ' differ'

0 votes

@sobi3ch votre version ne signale pas les fichiers se trouvant dans un seul répertoire

1 votes

@skv pourquoi ? C'est la même commande que la réponse. Je n'ai changé que --brief vers son raccourci -q .

305voto

FPC Points 745

La commande que j'utilise est la suivante :

diff -qr dir1/ dir2/

C'est exactement la même chose que celle de Mark :) Mais sa réponse m'a gêné car elle utilise des termes différents. types de drapeaux, et cela m'a fait regarder à deux fois. En utilisant les drapeaux plus verbeux de Mark, ce serait :

diff  --brief --recursive dir1/ dir2/

Je m'excuse d'avoir posté un message alors que l'autre réponse est parfaitement acceptable. Je n'ai pas pu m'en empêcher... je m'efforce d'être moins pédant.

8 votes

J'apprécie totalement la cohérence - mais ne vous sentez pas mal ; j'ai aussi donné un vote positif à la réponse de Mark ;)

11 votes

Alors est-ce que cela a du sens de mettre des réponses différentes avec une saveur différente ? IMHO non ! Est-il judicieux de combiner les deux réponses en une seule réponse cohérente ? oui ! ;)

1 votes

Juste une question : qu'est-ce que le q représentent-ils ? S'agit-il d'une abréviation ? Je n'arrive pas à trouver de logique derrière le q ..

131voto

Alan Porter Points 187

J'aime utiliser git diff --no-index dir1/ dir2/ Il permet d'afficher les différences en couleur (si cette option est activée dans la configuration de git) et d'afficher toutes les différences dans une longue page à l'aide de "less".

34 votes

Très bien. Qui aurait pu deviner que git peut différencier des répertoires arbitraires, et pas seulement le repo par rapport à ses fichiers ?

3 votes

Perl script colordiff est très utile ici, il peut être utilisé avec svn et diff normal.

6 votes

Si vous comparez (comme moi) 2 répertoires en tant que projets/repos git séparés, vous devez ajouter --no-index plus sur stackoverflow.com/a/1792477/473390 . J'ai mis à jour la réponse de @alan-porter.

56voto

CodeBug Points 401

Utilisation rsync :

rsync --dry-run --recursive --delete --links --checksum --verbose /dir1/ /dir2/ > dirdiff_2.txt

Il est également possible d'utiliser diff :

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

Ils sont fonctionnellement équivalents, mais leur performance peut varier en fonction de leur utilisation :

  • Si les répertoires se trouvent sur le même disque, rsync est plus rapide.
  • Si les répertoires se trouvent sur deux disques distincts, diff est plus rapide.

En effet, diff impose une charge presque égale aux deux répertoires en parallèle, maximisant ainsi la charge sur les deux disques. rsync calcule les sommes de contrôle par gros morceaux avant de les comparer. Cela permet de regrouper les opérations d'entrée/sortie en gros morceaux et d'obtenir un traitement plus efficace lorsque les opérations se déroulent sur un seul disque.

38voto

Alexander Points 1851

Meld est également un excellent outil pour comparer deux répertoires :

meld dir1/ dir2/

Meld propose de nombreuses options pour comparer des fichiers ou des répertoires. Si deux fichiers diffèrent, il est facile d'entrer dans le mode de comparaison de fichiers et de voir les différences exactes.

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