45 votes

Comment comparer deux arborescences de sources sous Linux ?

J'ai deux répertoires contenant les fichiers sources d'un projet dont j'ai hérité, avec peu de documentation. Comment puis-je comparer les deux répertoires pour voir quelles sont les différences ?

0 votes

Avec toutes les bonnes réponses fournies ci-dessus, si vous avez besoin d'une aide vidéo, j'ai trouvé cette vidéo utile dans ma recherche de réponse youtube.com/watch?v=TcJkLV1EeuU

60voto

jcrossley3 Points 6297

Essayez ça :

diff -Naur dir1/ dir2/
  • En -u L'option fait de la sortie un un peu plus facile à lire.
  • En -r L'option récure parmi tous les sous-répertoires
  • En -N y -a les options sont vraiment nécessaires uniquement si vous souhaitez créer un fichier patch.

36voto

manatlan Points 459

Vous pouvez essayer Meld . C'est un merveilleux outil de différenciation visuelle ;-)

0 votes

J'avais déjà utilisé Meld pour la comparaison de fichiers, mais je ne savais pas qu'il était aussi performant pour la comparaison d'arbres.

29voto

Bert Huijben Points 13856
diff -u -r dirA dirB

Vous montrera une différence récursive unifiée entre les fichiers dans le répertoire A et le répertoire B.

0 votes

Cela fonctionne également sous Cygwin, ce qui est exactement ce dont j'avais besoin.

7voto

Decio Lira Points 1449

Vous pouvez utiliser la commande diff dans le shell. Ou installer un outil comme KDiff3 .

2 votes

+1 pour KDiff3. Il fonctionne très bien pour comparer des répertoires (et des sous-répertoires, etc.).

0 votes

+1 - J'avais regardé KDiff3 mais je n'avais pas réalisé qu'il le faisait parce que j'utilisais le glisser-déposer. Vous peut glisser-déposer des répertoires, mais vous devrez utiliser la boîte de dialogue d'ouverture et cliquer sur OK pour qu'elle lance la comparaison.

1voto

nikc Points 354

La commande diff pour comparer les répertoires n'arrêtait pas de me dire que je n'avais pas de différences, alors que je savais qu'il y en avait.

Au lieu d'utiliser diff directement, j'ai utilisé une liste triée de md5sums et j'ai ensuite comparé ces fichiers avec diff :

find /path1/dir/ -type f -exec md5sum {} + | awk '{print $2 $1}' | sort >! path1.log
find /path2/dir/ -type f -exec md5sum {} + | awk '{print $2 $1}' | sort >! path2.log
gvimdiff path1.log path2.log

Si le début du chemin cause des maux de tête, changez-le. Sélectionnez la fenêtre Path1 et tapez :

:%s|path1|path2|g

Cela remplacera toutes les instances de path1 avec path2 dans le premier fichier, et maintenant votre diff devrait seulement montrer les différences.

1 votes

Je n'ai jamais vu >! avant. Que fait-il ?

0 votes

Je vais juste supposer que le >! est une faute de frappe et qu'il faut lire > . De cette façon, le commandement et le processus ont un sens.

1 votes

+1 en supposant que le >! est changé en > l'autre variation mineure que j'ai faite a simplement changé le répertoire en path1/dir et faire find . afin de ne pas avoir à changer manuellement les noms de chemin

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