2013-10-16 6 views
17

Ich bin neu in Unix und brauche hier Hilfe. Ich habe zwei Verzeichnisse auf zwei verschiedenen Servern. Beide Verzeichnisse enthalten dieselben Dateien. Jetzt möchte ich überprüfen, ob alle Dateien in beiden Verzeichnissen synchronisiert sind. Wenn Dateien nicht synchronisiert sind, möchte ich nur den Namen dieser Dateien anzeigen. Ich kann es tun, wenn Verzeichnisse auf demselben Server sind. nicht in der Lage, herauszufinden, wie dies zu tun ist, wenn Verzeichnisse auf zwei verschiedenen Servern vorhanden sind.Inhalt von zwei Verzeichnissen auf Remote-Server mit Unix vergleichen

Hier möchte ich nur Dateinamen anzeigen, wenn es nicht synchron ist.

Vielen Dank im Voraus

+0

Montieren Sie die beiden Server auf einem gemeinsamen System und * vergleichen Sie wie gewohnt *. – devnull

+0

können wir dies nicht erreichen mit diff, rsync oder vimdiff – DSD

Antwort

44

Sie rsync mit der Option -n, um herauszufinden, verwenden können, wenn die Dateien synchronisiert sind, ohne eine Synchronisierung tatsächlich zu tun.

Zum Beispiel von server1:

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

Dadurch werden die Namen aller Dateien (rekursiv, mit dem Flag -r), die zwischen server1 unterscheiden drucken:/abc/home/sample1/und server2:/abc/home/sample2/

+0

Danke..ich verwendet rsync mit ssh und es funktioniert gut – DSD

+1

Große Antwort. Das '-c' ist hier sehr wichtig, da es speziell durch die Prüfsumme verglichen wird. Ich bekam falsche Positive ohne es. '-a' impliziert' -r' (es sei denn, du benutzt '--files-from') – isuldor

+3

Nur um es zusammenzufassen. Sie möchten 'rsync -avcn folder1/folder2 /'. – mniess

4

Auf 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") 

Diese ziemlich schnell ist, aber wahrscheinlich nicht so genau wie rsync, da es Dateigröße statt Hash des Inhalts verwendet. Außerdem zeigt rsync aus kielnis Antwort nichts an, wenn server2 mehr Dateien als server1 hat. Statt dessen versuchen:

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

Ihr rsync-Befehl sollte die akzeptierte Antwort sein, da sie die einzige ist, die funktioniert. –

+0

--delete wird benötigt, um zu zeigen, ob eine Datei auf Server 2 existiert, aber nicht auf Server 1, die akzeptierte Antwort zeigt das nicht an – tsukimi

0

In Szenario keine Verbindung zwischen zwei Servern verwenden „Baum“ Befehl Verzeichnisstruktur in Dateien zu erhalten und dann zwei Dateien diff.

Verwandte Themen