web-dev-qa-db-fra.com

Meilleure façon de comparer (diff) une structure complète?

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

29
Adam Matan

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.

18
brianegge

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.

Je voulais:

  • Pour comparer le même système de fichiers avec elle-même, c'est-à-dire instantané , apporte des modifications , Snapshot , Comparer .
  • Une liste de quels fichiers ont été ajoutés ou supprimés, ne se souciaient pas des changements de fichiers internes.

Ce que j'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.

10
Camilo Martin

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.

9
Tim Long

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 ...

8
chris

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.

5
chmeee

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.

4
Saurabh Barjatiya

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

4
AlexB

J'utiliserais de la Meld pour ça.

3
pupeno

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.

2
Freedom Fighter

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

0
helvete