Quelle est la meilleure façon de comparer les structures de répertoire?
J'ai un utilitaire de sauvegarde qui utilise rsync. Je tiens à indiquer les différences exactes (en termes de tailles de fichiers et de dates de dernière modification) entre la source et la sauvegarde.
Quelque chose comme:
Local file Remote file Compare
/home/udi/1.txt (date)(size) /home/udi/1.txt (date)(size) EQUAL
/home/udi/2.txt (date)(size) /home/udi/2.txt (date)(size) DIFFERENT
Bien sûr, l'outil peut être prêt ou une idée d'un python Script.
Merci beaucoup!
UDI
L'outil que vous recherchez est RDiff . Cela fonctionne comme combinant RSYNC et DIFF. Il crée un fichier de correctif que vous pouvez comparer ou distribuer.
Certaines personnes veulent comparer des systèmes de fichiers pour différentes raisons, alors je vais écrire ici ce que je voulais et comment je l'ai fait.
Premier instantané (before.sh
script):
find / -xdev | sort > fs-before.txt
Deuxième instantané (after.sh
Script):
find / -xdev | sort > fs-after.txt
Pour les comparer (diff.sh
script):
diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'
La bonne partie est que cela utilise à peu près beaucoup de binaires de système par défaut. Avoir le comparateur basé sur le contenu pourrait être fait en passant find
un paramètre -exec
qui a fait écho au chemin de fichier et à un MD5 après cela.
Essayez au-delà de la comparaison 3 ( logiciel de scooter ) qui a des versions pour Windows et Linux. Une fois que vous l'avez utilisé, vous ne voudrez probablement utiliser aucun autre outil de comparaison de fichiers.
si vous n'avez pas envie d'installer un autre outil ...
for Host in Host1 Host2
do
ssh $Host '
cd /dir &&
find . |
while
read line
do
ls -l "$line"
done ' | sort > /tmp/temp.$Host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"
Et oui, cela pourrait être fait avec Rechercher et Exiger ou trouver et Xargs tout aussi facilement que trouvez dans A pour boucle. Et, aussi, vous pouvez plutôt perdre la sortie de diff, de sorte que "ce fichier est sur host1 mais pas host2" ou d'une autre, mais à ce moment-là, vous pouvez aussi bien installer les outils que tout le monde parle de ...
J'ai utilisé dirdiff dans le passé pour comparer les structures de répertoire. Cela ne fonctionne que sur les Dirrés locaux afin que vous ayez à sshfs
- Montez vos autres répertoires.
La bonne chose est que vous puissiez voir visuellement si les fichiers sont égaux ou non et lequel est plus récent ou plus âgé. Et il soutient jusqu'à 5 répertoires. Vous pouvez également voir des différences et copier des fichiers de l'une à l'autre.
De Rsync Man Page:
-n, --dry-run
This makes rsync perform a trial run that doesn’t make any changes (and produces mostly
the same output as a real run). It is most commonly used in combination with the -v,
--verbose and/or -i, --itemize-changes options to see what an rsync command is going to
do before one actually runs it.
Peut-être que cela aidera.
diff -r
fonctionne assez bien. Si vous voulez simplement savoir si les fichiers diffèrent, pas le contenu réel des différences, alors do diff -qr
J'utiliserais de la Meld pour ça.
Outre les outils déjà mentionnés sous Windows, vous pouvez utiliser Total Commander ou WINSCP, les deux fonctionnent très confortables pour comparer (et synchroniser) les répertoires.
Je ne voulais vraiment rien installer de nouveau, alors ma solution est un peu brute, mais rapide et efficace.
Je voulais comparer tous les fichiers ont été copiés et leur mode de fichiers, la propriété et la sécurité SELINUX ne sont pas chonnés.
Alors j'ai couru:
rsync -aX /orig /copy/
et puis comparez comme ça:
cd /orig && ls -lZR > /tmp/diff_orig
cd /copy && ls -lZR > /tmp/diff_copy
vimdiff /tmp/diff_*
Si le contenu des deux fichiers reste effondré, ils sont identiques. Sinon, le diff est montré.
Mettre à jour les paramètres de ls
pour refléter les attributs que vous devez vérifier. Ymmv