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 à la fois les fichiers dans dir1
mais pas dans dir2
ainsi que les fichiers dans dir2
mais pas dans dir1
,
J'essaie de trouver les fichiers dans dir1
mais pas dans dir2
seulement.
Voici un petit échantillon de ce à quoi ressemblent 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 vient à l'esprit est comment puis-je trouver les fichiers dans dir1
mais pas dans dir2
ou dir3
en une seule commande ?
diff -r dir1 dir2 | grep dir1 | awk '{print $4}' > difference1.txt
Explication:
diff -r dir1 dir2
montre quels sont 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 des fichiers présents dans les deux répertoires, le cas échéant.
diff -r dir1 dir2 | grep dir1
montre les fichiers qui se trouvent uniquement dans le répertoire 1.
awk
pour n'imprimer que le nom du fichier.
comm -23 <(ls dir1 |sort) <(ls dir2|sort)
Cette commande vous donnera les fichiers qui sont dans le répertoire 1 et non dans le répertoire 2.
A propos du signe <( )
, vous pouvez le Googler comme 'process substitution' ;.
Le plugin [DirDiff][1] de vim est un autre outil très utile pour comparer des répertoires.
vim -c "DirDiff dir1 dir2"
Il ne se contente pas de lister les fichiers différents entre les répertoires, mais vous permet également d'inspecter/modifier avec vimdiff les fichiers qui sont différents.