2013-10-16 6 views
17

का उपयोग कर रिमोट सर्वर पर दो निर्देशिकाओं की सामग्री की तुलना करें मैं यूनिक्स के लिए नया हूं और यहां कुछ मदद की ज़रूरत है। मेरे पास दो अलग-अलग सर्वर पर दो निर्देशिकाएं मौजूद हैं। दोनों निर्देशिकाओं में एक ही फाइलें हैं। अब मैं जांचना चाहता हूं कि सभी फाइलें दोनों निर्देशिकाओं में सिंक हो रही हैं या नहीं। अगर फ़ाइलें सिंक में नहीं हैं तो मैं केवल उन फ़ाइलों का नाम प्रदर्शित करना चाहता हूं। निर्देशिकाएं एक ही सर्वर पर होने पर मैं इसे करने में सक्षम हूं। यह पता लगाने में सक्षम नहीं है कि निर्देशिका कैसे दो अलग-अलग सर्वरों पर मौजूद होती है।यूनिक्स

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

यहां मैं सिंक में नहीं होने पर केवल फाइलों का नाम प्रदर्शित करना चाहता हूं।

अग्रिम

+0

एक सामान्य सिस्टम पर दो सर्वरों को माउंट करें और * सामान्य तरीके से तुलना करें * की तुलना करें। – devnull

+0

हम diff, rsync या vimdiff – DSD

उत्तर

44

धन्यवाद आप -n ध्वज के साथ rsync उपयोग कर सकते हैं जानने के लिए कि फ़ाइलें सिंक में कर रहे हैं, वास्तव में एक सिंक कर के बिना।

उदाहरण के लिए, server1 से:/एबीसी/घर/sample1/और server2:

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

यह (-r ध्वज के साथ पुनरावर्ती,) सभी फ़ाइलों के नाम कि server1 के बीच भिन्न प्रिंट होगा/एबीसी/घर/sample2/

+0

का उपयोग करके इसे प्राप्त नहीं कर सकते हैं धन्यवाद .. मैंने ssh के साथ rsync का उपयोग किया है और यह ठीक – DSD

+1

अच्छा उत्तर देता है। यहां '-c' बहुत महत्वपूर्ण है, क्योंकि यह विशेष रूप से चेकसम द्वारा तुलना करता है। मुझे इसके बिना झूठी सकारात्मक लग रही थी। '-a' का अर्थ है '-r' (जब तक आप' --files-from' का उपयोग नहीं कर रहे हैं) – isuldor

+3

बस इसे समेटने के लिए। आप 'rsync -avcn फ़ोल्डर 1/फ़ोल्डर 2 /' चाहते हैं। – mniess

4

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

यह बहुत तेजी से लेकिन शायद के रूप में rsync के बाद से यह फ़ाइल आकार के बजाय सामग्री के हैश का उपयोग करता है के रूप में सही नहीं है। इसके अलावा, kielni के उत्तर से rsync कुछ भी नहीं दिखाएगा यदि सर्वर 2 में अधिक फ़ाइलें हैं तो सर्वर 1। इसके बजाय इस कोशिश:

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

आपका rsync कमांड स्वीकार्य उत्तर होना चाहिए क्योंकि यह केवल एकमात्र काम करता है। –

+0

- यह दिखाने के लिए डिलीट की आवश्यकता है कि कोई फ़ाइल सर्वर 2 पर मौजूद है लेकिन सर्वर 1 नहीं है, स्वीकृत उत्तर यह नहीं दिखाता है कि – tsukimi

0

दो सर्वर के बीच कोई संपर्क के परिदृश्य में, का उपयोग "पेड़" आदेश फाइलों में निर्देशिका संरचना और उसके बाद दो फ़ाइलों diff प्राप्त करने के लिए।