Ce qui suit (si vous substituez le premier répertoire au répertoire1 et le second au répertoire2) devrait faire ce que vous recherchez et rapidement :
find directory1 -type d -printf "%P\n" | sort > file1
find directory2 -type d -printf "%P\n" | sort | diff - file1
Le principe fondamental est qu'il imprime tous les répertoires, y compris les chemins de sous-répertoires relatifs aux répertoires de base répertoireN.
Cela pourrait tomber (produire une sortie bizarre) si vous avez des retours chariot dans certains noms de répertoires mais pas dans d'autres.
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)
vous donnera un bel affichage côte à côte des deux hiérarchies de répertoires avec toutes les sections communes pliées.
J'utilise habituellement rsync
pour cette tâche :
rsync -nav --delete DIR1/ DIR2
SOYEZ TRÈS PRUDENT toujours utiliser le -n
, alias --dry-run
, option, ou il synchronisera (changera le contenu de) les répertoires.
Cela comparera les fichiers en fonction des heures et des tailles de modification des fichiers... Je pense c'est ce que tu veux vraiment, ou du moins ça ne te dérange pas si ça fait ça ? J'ai l'impression que tu veux juste que ça se passe plus vite , pas que vous en ayez besoin pour ignorer la différence entre le contenu des fichiers. Si vous voulez qu'il ne répertorie pas les fichiers différents avec des noms identiques, je pense que l'ajout du --ignore-existing
l'option le fera.
Sachez également que ne pas mettre un /
à la fin de DIR1
le fera comparer le répertoire DIR1
avec le contenu de DIR2
.
La sortie finit par être un peu détaillée, mais elle vous montrera quels fichiers/répertoires diffèrent. Fichiers/répertoires présents dans DIR2
et non en DIR1
sera précédé du mot deleting
.
Pour certaines situations, la réponse de @ slartibartfast peut être plus appropriée, bien que vous deviez supprimer le -type d
option pour activer la liste des fichiers non-répertoire. rsync
sera plus rapide si vous avez un nombre important de fichiers/répertoires à comparer.