Existe-t-il des outils Linux / Unix qui trouvent tous les fichiers d'un répertoire non présents dans un autre? Fondamentalement, je recherche un diff qui fonctionne sur la sortie de ls.
Des scripts courts et doux sont également appréciés.
Existe-t-il des outils Linux / Unix qui trouvent tous les fichiers d'un répertoire non présents dans un autre? Fondamentalement, je recherche un diff qui fonctionne sur la sortie de ls.
Des scripts courts et doux sont également appréciés.
Réponses:
diff
le fait déjà:
diff dir1 dir2
Exemple de sortie:
Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
Frapper:
diff <(cd dir1; ls) <(cd dir2; ls)
Comparez uniquement les noms de fichiers - pas le contenu des fichiers.
ls
, utilisez find
plutôt!
Comme les gens vous l'ont dit ici, vous pouvez utiliser DIFF dans diverses variantes d'utilisation. Ou vous utilisez simplement à la dirdiff
place, ce qui est destiné à ce que vous essayez! :-)
Mais si vous souhaitez synchroniser certains répertoires, vous devriez vraiment y jeter un œil rsync
.
Cordialement
Si vous souhaitez également le faire dans tous les sous-répertoires, une bonne façon de le faire est:
diff --brief -r dir1/ dir2/
Je préfère utiliser le brief, mais vous pouvez laisser cela de côté si vous le souhaitez.
Dennis Williamson avait une bonne réponse , mais je devais le faire récursivement. GNU findutils 4.7.0 ne trie pas sa sortie, voici donc ce que j'ai utilisé
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
Pour ce faire d'une seule façon et produire une liste de fichiers, j'ai utilisé ceci:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"
Pour que cela fonctionne correctement, ni $ dir1 ni $ dir2 ne doivent inclure la barre oblique de fin.
diff dir1 dir2 | grep "Only"