2013-10-16 47 views
17

Jestem nowy w systemie Unix i potrzebuję pomocy. Mam dwa katalogi obecne na dwóch różnych serwerów. oba katalogi zawierają te same pliki. Teraz chcę sprawdzić, czy wszystkie pliki są zsynchronizowane w obu katalogach. Jeśli pliki nie są zsynchronizowane, chcę wyświetlić tylko nazwę tych plików. Jestem w stanie to zrobić, gdy katalogi są na tym samym serwerze. nie jest w stanie dowiedzieć się, jak to zrobić, gdy katalogi są obecne na dwóch różnych serwerach.Porównanie zawartości dwóch katalogów na serwerze zdalnym przy użyciu Uniksa

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

Tutaj chcę tylko nazwy plików, aby wyświetlić, gdy nie są zsynchronizowane.

góry dzięki

+0

Zamontuj dwa serwery na wspólnym systemie i * porównaj sposób, w jaki postępujesz tak jak zwykle *. – devnull

+0

nie możemy tego osiągnąć za pomocą diff, rsync lub vimdiff – DSD

Odpowiedz

44

Można użyć rsync z -n, aby dowiedzieć się, czy pliki są zsynchronizowane, bez faktycznie robi synchronizację.

Na przykład, od serwer1:

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

To spowoduje wydrukowanie nazwy wszystkich plików (rekurencyjnych, z -r Flag), które różnią się między serwer1:/ABC/home/sample1/i server2:/abc/home/sample2/

+0

Dzięki .. użyłem rsync z ssh i działa dobrze – DSD

+1

Świetna odpowiedź. "-c" tutaj jest bardzo ważne, ponieważ porównuje konkretnie sumę kontrolną. Bez tego otrzymywałem fałszywe pozytywne wyniki. '-a' oznacza' -r' (chyba, że ​​używasz '--files-from') – isuldor

+3

Po prostu podsumuj to. Chcesz 'rsync -avcn folder1/folder2 /'. – mniess

4

Na serwer1:

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

jest to dość szybko, ale chyba nie tak dokładne jak rsync ponieważ używa rozmiaru pliku zamiast mieszania zawartości. Ponadto, rsync z odpowiedzi kielni nie pokaże niczego, jeśli serwer2 ma więcej plików niż serwer1. Zamiast tego spróbuj tego:

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

Twoje polecenie rsync powinno być zaakceptowaną odpowiedzią, ponieważ jest jedyną, która działa. –

+0

--delete jest potrzebne do pokazania, czy plik istnieje na serwerze 2, ale nie na serwerze 1, zaakceptowana odpowiedź nie pokazuje, że – tsukimi

0

W scenariuszu braku łączności między dwoma serwerami, użyj polecenia „drzewo”, aby uzyskać strukturę katalogów w plikach, a następnie diff dwa pliki.