Comment différencier les noms de fichiers dans deux répertoires (sans écrire dans des fichiers intermédiaires)?

31

J'essaie de faire quelque chose dans le sens de:

diff `ls -1a ./dir1` `ls -1a ./dir2`

Mais cela ne fonctionne pas pour des raisons évidentes. Existe-t-il un meilleur moyen d'y parvenir (en 1 ligne) que cela?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

Merci

bguiz
la source

Réponses:

47

Tu étais proche. Dans bash, vous voulez une substitution de processus , pas une substitution de commande:

diff <(ls -1a ./dir1) <(ls -1a ./dir2)
Ignacio Vazquez-Abrams
la source
La substitution de processus n'est cependant pas nécessaire. La réponse ci-dessous ( superuser.com/a/228773/566289 ) est exacte!
Jan D
Sauf que cette réponse diffère le contenu, pas les noms de fichiers!
perdu
10
diff -rq dir1 dir2

en utilisant l'option -r, parcourez des arborescences de répertoires entières, en vérifiant récursivement les différences entre les sous-répertoires et les fichiers qui se produisent à des points comparables dans chaque arborescence. L'astuce consiste à utiliser l'option -q pour supprimer les comparaisons ligne par ligne

fseto
la source
3
@festo: Vous manquez la poitrine de cette question, je ne veux pas vraiment différencier le contenu des fichiers, je veux différencier la sortie des lscommandes
bguiz
+1, En fait, j'ai obtenu la même sortie avec la seule mise en garde, diff -rq a signalé un fichier lié comme `` Aucun fichier ou répertoire ''. Donc, plus un pour une utilisation correcte et franchement plus simple. (même si la réponse d'IVA est une meilleure «opportunité d'apprentissage» pour la substitution de processus (> _ <)
xtian
1
C'est beaucoup plus lent que de différencier les noms de fichiers: l'intégralité de chaque fichier doit être lue et comparée.
Zaz
@Josh bien sûr, car il le fait récursivement ....
Braiam
1
@Braiam: Même si vous différez récursivement les noms de fichiers (en utilisant rsyncavec l' --dry-runoption, par exemple), ce serait toujours beaucoup plus rapide que diff -r.
Zaz