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

Réponses:



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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.