61 votes

Linux : Comparer la structure des répertoires sans comparer les fichiers

Quelle est la meilleure et la plus simple façon de comparer deux structures de répertoires sans comparer les données dans les fichiers ? Cela fonctionne bien :

diff -qr dir1 dir2_

Mais c'est vraiment lent parce qu'il faut aussi comparer les fichiers. Existe-t-il un commutateur pour diff ou un autre outil cli simple pour faire cela ?

0voto

Dany Points 1

J'ai deux très grands répertoires (environ 2 To chacun avec des tonnes de sous-répertoires) que j'utilise rsync pour les synchroniser ensemble et parfois rsync ne parvient pas à synchroniser correctement et j'ai besoin de trouver les différences entre les deux.

puisque la taille des répertoires est très grande diff ne sera pas pratique car il faudra aussi comparer les fichiers, ce qui prendra un siècle.

J'ai essayé la réponse actuelle du top, après 10 minutes d'exécution elle ne m'a donné aucun résultat (aucune idée du temps qu'il faudrait si je ne l'arrêtais pas).

Voici ce que j'ai utilisé pour trouver les différences entre les deux en moins de 5 minutes :

du  /D1/  | sort > 1.txt  &&  sed -i 's/D1/D4/g' 1.txt
du  /D2/  | sort > 2.txt
diff 1.txt 2.txt

du listera tous les répertoires, sous-répertoires et fichiers en fonction de leur taille (kb) et transmettra la sortie à la commande sort qui les triera par taille et les écrira dans 1.txt & 2.txt pour les répertoires D1 et D2 respectivement.

sed -i 's/D1/D4/g' 1.txt

Cette commande remplace essentiellement tous les D1 par des D2 dans 1.txt. Nous devons le faire parce que nous utilisons diff pour trouver les différences entre les deux fichiers texte. Si nous ne le faisons pas, toutes les lignes seront considérées comme des différences.

enfin diff 1.txt 2.txt va nous montrer les différences entre les deux répertoires.

-3voto

Znik Points 329

Je pense que seul rsync est utilisable. Pourquoi ?

diff n'est utile que pour les structures conservant des fichiers et des répertoires. Diff ne donne pas de codes de sortie adéquats lorsque nous utilisons des liens symboliques. Dans cette situation, diff peut retourner 2 codes de sortie, même si src et dst sont identiques (temps, tailles, noms, timestamps, softlinks de pointage etc).

dir, le système de fichiers ne garantit pas l'ordre des fichiers, même si le contenu des répertoires src et dst est identique. Vous devriez peut-être filtrer la sortie de ls en la triant. Mais ls pur n'affiche que les noms des noeuds.

peut-être que script incluant diff, cmp, test -X pour les types de noeuds sera utile, mais il faut se souvenir de la surcharge causée par de nombreuses exécutions de test/cmp. Le script sera très lent.

Comme d'habitude, si vous voulez obtenir l'information simple "les répertoires sont/ne sont pas identiques", vous devez utiliser rsync avec l'option -n (sec). Si vous voulez trouver ce qui est différent, utilisez la commande diff.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X