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)

12voto

todd_dsm Points 662

Un compatriote de Channel, 'billings' (de freenode/#centos fame), a partagé sa méthode avec moi :

diff -Naur dir1/ dir2

L'inclusion de la barre oblique finale du répertoire n'a pas d'importance.

Il apparaît également que le -u n'est pas disponible sur certaines versions anciennes/serveur de diff.

La différence des différences :

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST

# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ

6voto

Javeed Shakeel Points 591

Pour trouver diff, utilisez la commande suivante :

diff -qr dir1/ dir2/

-r diffère également tous les sous-répertoires -q indique à diff de ne signaler que les fichiers qui diffèrent.

diff  --brief dir1/ dir2/

--brève affichera les fichiers qui n'existent pas dans le répertoire.

Ou bien

Nous pouvons utiliser Meld qui s'affiche dans une fenêtre graphique, ce qui permet de trouver facilement la différence.

meld  dir1/ dir2/

4voto

nh2 Points 4421

Diffoscope est un excellent outil de comparaison de répertoires en ligne de commande.

J'apprécie particulièrement le fait qu'il puisse diff en des dossiers :

Il décompactera récursivement des archives de toutes sortes et transformera divers formats binaires en une forme plus lisible pour l'homme afin de les comparer. Il peut tout aussi bien comparer deux tarballs, deux images ISO ou deux fichiers PDF.

Il vous indiquera non seulement les fichiers qui diffèrent, mais aussi la manière dont ils diffèrent.

2voto

Fábio Points 528

Vous pouvez également utiliser Rsync y find . Pour find :

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

Cependant, les fichiers portant le même nom et se trouvant dans les mêmes sous-dossiers, mais dont le contenu est différent, n'apparaîtront pas dans les listes.

Si vous êtes un fan de l'interface graphique, vous pouvez consulter le site suivant Meld que @Alexander mentionnés. Il fonctionne parfaitement sous Windows et Linux.

2voto

Kickaha Points 559

Signaler les différences entre dirA et dirB, tout en effectuant une mise à jour/synchronisation :

rsync -auv <dirA> <dirB>

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