Il modo migliore per confrontare (diff) una struttura di directory completa?


29

Qual è il modo migliore per confrontare le strutture di directory?

Ho un'utilità di backup che utilizza rsync . Voglio dire le differenze esatte (in termini di dimensioni dei file e date dell'ultima modifica) tra l'origine e il backup.

Qualcosa di simile a:

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

Naturalmente, lo strumento può essere pronto o un'idea per uno script Python.

Grazie molto!

Udi

Risposte:


18

Lo strumento che stai cercando è rdiff . Funziona come combinare rsync e diff. Crea un file patch che puoi confrontare o distribuire.


9

Alcune persone vogliono confrontare i filesystem per diversi motivi, quindi scriverò qui quello che volevo e come l'ho fatto.

Volevo:

  • Per confrontare lo stesso filesystem con se stesso, ovvero istantanea , apportare modifiche , istantanea , confrontare .
  • Un elenco di quali file sono stati aggiunti o rimossi, non importa delle modifiche ai file interni.

Cosa ho fatto:

Prima istantanea ( before.shscript):

find / -xdev | sort > fs-before.txt

Seconda istantanea ( after.shscript):

find / -xdev | sort > fs-after.txt

Per confrontarli ( diff.shscript):

diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'

La parte buona è che questo utilizza praticamente binari di sistema predefiniti. Avere il confronto in base al contenuto potrebbe essere fatto passando findun -execparametro che fa eco al percorso del file e un MD5 dopo.


8

se non hai voglia di installare un altro strumento ...

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!"

E sì, potrebbe essere fatto con find ed exec o find e xargs con la stessa facilità di find in un ciclo for. E, inoltre, puoi graziare l'output di diff così dice cose come "questo file è su host1 ma non host2" o alcuni di questi, ma a quel punto puoi anche installare gli strumenti di cui tutti gli altri stanno parlando ...


5

Ho usato dirdiff in passato per confrontare le strutture di directory. Funziona solo su directory locali, quindi dovrai sshfsmontare le tue altre directory.

La cosa buona è che puoi vedere visivamente se i file sono uguali o meno e quale è più nuovo o più vecchio. E supporta fino a 5 directory. Puoi anche vedere le differenze e copiare i file dall'uno all'altro.


4

Dalla pagina man di rsync:

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

Potrebbe essere questo aiuterà.


Grazie, ma non risolve il mio problema (sto cercando il diff per dire effettivamente le differenze).
Adam Matan,

4

diff -rin realtà funziona abbastanza bene. Se vuoi solo sapere se i file differiscono, non il contenuto effettivo delle differenze, allora fallodiff -qr


1
-rsignifica ricorsivo, non si connette a un host remoto!
Michael Hampton


2

Oltre agli strumenti già menzionati su Windows, puoi utilizzare Total Commander o WinSCP, entrambi hanno funzioni molto comode per confrontare (e sincronizzare) le directory.


0

Non volevo davvero installare nulla di nuovo, quindi la mia soluzione è un po 'rozza, ma rapida ed efficace.

Volevo confrontare tutti i file che sono stati copiati e la loro modalità di file, la proprietà e il contesto di sicurezza SELinux rimangono non controllati.

Quindi ho corso:

rsync -aX /orig /copy/

e quindi confrontare in questo modo:

cd /orig && ls -lZR > /tmp/diff_orig
cd /copy && ls -lZR > /tmp/diff_copy
vimdiff /tmp/diff_*

Se il contenuto di entrambi i file rimane compresso, sono identici. In caso contrario, viene mostrato il diff.

Aggiorna i parametri lsper riflettere gli attributi che devi verificare. YMMV

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.