295 votes

Trouver les fichiers existant dans un répertoire mais pas dans l'autre

J'essaie de trouver les fichiers qui existent dans un répertoire mais pas dans l'autre, j'ai essayé d'utiliser cette commande :

diff -q dir1 dir2

Le problème avec la commande ci-dessus est qu'elle trouve les deux fichiers dans dir1 mais pas en dir2 ainsi que les fichiers dans dir2 mais pas en dir1 ,

J'essaie de trouver les fichiers dans dir1 mais pas en dir2 seulement.

Voici un petit échantillon de mes données

dir1    dir2    dir3
1.txt   1.txt   1.txt
2.txt   3.txt   3.txt
5.txt   4.txt   5.txt
6.txt   7.txt   8.txt

Une autre question qui me préoccupe est de savoir comment je peux trouver les fichiers dans dir1 mais pas en dir2 o dir3 en une seule commande ?

389voto

asclepix Points 1322
diff -r dir1 dir2 | grep dir1 | awk '{print $4}' > difference1.txt

Explication :

  • diff -r dir1 dir2 indique les fichiers qui se trouvent uniquement dans le répertoire 1 et ceux qui se trouvent uniquement dans le répertoire 2, ainsi que les modifications apportées aux fichiers présents dans les deux répertoires, le cas échéant.

  • diff -r dir1 dir2 | grep dir1 montre quels sont les fichiers qui se trouvent uniquement dans le répertoire 1

  • awk pour n'imprimer que le nom du fichier.

139voto

tokhi Points 1911

Cela devrait suffire :

diff -rq dir1 dir2

Options expliquées (via diff(1)) page de manuel ) :

  • -r - Comparer récursivement tous les sous-répertoires trouvés.
  • -q - La sortie ne se fait que si les fichiers diffèrent.

50voto

plhn Points 424
comm -23 <(ls dir1 |sort) <(ls dir2|sort)

Cette commande vous donnera les fichiers qui se trouvent dans dir1 et no dans dir2.

A propos de <( ) signe, vous pouvez le rechercher sur Google sous le nom de "substitution de processus".

32voto

Adail Junior Points 431

Une bonne façon d'effectuer cette comparaison est d'utiliser find avec md5sum , alors a diff .

Exemple :

Utilisation find pour lister tous les fichiers du répertoire, puis calculer le hash md5 de chaque fichier et l'envoyer dans un fichier :

find /dir1/ -type f -exec md5sum {} \; > dir1.txt

Procédez de la même manière pour l'autre répertoire :

find /dir2/ -type f -exec md5sum {} \; > dir2.txt

Comparez ensuite le résultat des deux fichiers avec "diff" :

diff dir1.txt dir2.txt

Cette stratégie est très utile lorsque les deux répertoires à comparer ne se trouvent pas sur la même machine et que vous devez vous assurer que les fichiers sont identiques dans les deux répertoires.

Une autre bonne façon de procéder consiste à utiliser git

git diff --no-index dir1/ dir2/

Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées.

17voto

Catalin Hritcu Points 41

Meld ( http://meldmerge.org/ ) fait un excellent travail de comparaison des répertoires et des fichiers qu'ils contiennent.

Meld comparing directories

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