2013-10-16 28 views
17

Sono nuovo di Unix e ho bisogno di aiuto qui. Ho due directory presenti su due server diversi. entrambe le directory contengono gli stessi file. Ora voglio controllare se tutti i file sono sincronizzati in entrambe le directory. Se i file non sono sincronizzati, desidero visualizzare solo il nome di tali file. Sono in grado di farlo quando le directory sono sullo stesso server. non è in grado di capire come farlo quando le directory sono presenti su due server diversi.confronta il contenuto di due directory sul server remoto usando unix

eg: 
server1 /abc/home/sample1/ 
server2 /abc/home/sample2/ 

qui voglio solo il nome dei file da visualizzare quando non è sincronizzato.

Grazie in anticipo

+0

Montare i due server su un sistema comune e * confrontare come si fa normalmente *. – devnull

+0

non possiamo ottenere questo utilizzando diff, rsync o vimdiff – DSD

risposta

44

È possibile utilizzare rsync con il flag -n per scoprire se i file sono in sincronia, senza in realtà fare una sincronizzazione.

Per esempio, da server1:

rsync -n -avrc /abc/home/sample1/* server2:/abc/home/sample2/ 

Questo stamperà i nomi di tutti i file (ricorsive, con l'opzione -r) che differiscono tra server1:/abc/home/sample1/e Server2:/ABC/home/sample2/

+0

Grazie .. ho usato rsync con ssh e funziona bene – DSD

+1

Ottima risposta. Il '-c' qui è super importante, in quanto si confronta in modo specifico con il checksum. Stavo diventando falso positivo senza di esso. '-a' implica' -r' (a meno che non si usi '--files-from') – isuldor

+3

Solo per riassumere. Vuoi 'rsync -avcn folder1/folder2 /'. – mniess

4

in Server1:

cd /abc/home/sample1/ && diff --side-by-side --suppress-common-lines <(find . -type f|xargs stat --printf "%s\t%n\n"|sort -n) <(ssh server2 "cd /abc/home/sample2/ && find . -type f|xargs stat --printf \"%s\t%n\n\"|sort -n") 

Questo è piuttosto veloce, ma probabilmente non così preciso come rsync in quanto utilizza la dimensione del file, invece di hash dei contenuti. Inoltre, rsync dalla risposta di kielni non mostrerà nulla se server2 ha più file quindi server1. Invece provare questo:

rsync -n -avr --size-only --delete /abc/home/sample1/ server2:/abc/home/sample2/ 
+0

Il tuo comando rsync dovrebbe essere la risposta accettata in quanto è l'unica che funziona. –

+0

--delete è necessario per mostrare se esiste un file sul server 2 ma non sul server 1, la risposta accettata non mostra che – tsukimi

0

Nello scenario di connettività tra due server, utilizzare il comando "albero" per ottenere struttura di directory in file e poi diff due file.