पूर्ण निर्देशिका संरचना की तुलना (भिन्न) करने का सर्वोत्तम तरीका?


29

निर्देशिका संरचनाओं की तुलना करने का सबसे अच्छा तरीका क्या है?

मेरे पास एक बैकअप उपयोगिता है जो rsync का उपयोग करती है । मैं स्रोत और बैकअप के बीच सटीक अंतर (फ़ाइल आकार और अंतिम-परिवर्तित तिथियों के संदर्भ में) बताना चाहता हूं।

कुछ इस तरह:

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

बेशक, उपकरण तैयार हो सकता है या अजगर स्क्रिप्ट के लिए एक विचार हो सकता है।

बहुत धन्यवाद!

उदी

जवाबों:


18

जिस टूल को आप ढूंढ रहे हैं वह rdiff है । यह rsync और अंतर के संयोजन की तरह काम करता है। यह एक पैच फ़ाइल बनाता है जिसकी आप तुलना या वितरण कर सकते हैं।


9

कुछ लोग अलग-अलग कारणों से फाइलसिस्टम की तुलना करना चाहते हैं, इसलिए मैं यहां लिखूंगा कि मुझे क्या चाहिए और मैंने यह कैसे किया।

मैं चाहता था:

  • तुलना करने के लिए एक ही फाइल सिस्टम के साथ ही, यानी, स्नैपशॉट , किए जाने वाले परिवर्तन , स्नैपशॉट , तुलना
  • फ़ाइलों को क्या जोड़ा गया या हटाया गया, इसकी एक सूची ने आंतरिक फ़ाइल परिवर्तनों की परवाह नहीं की।

मैंने क्या किया:

पहला स्नैपशॉट ( before.shस्क्रिप्ट):

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

दूसरा स्नैपशॉट ( after.shस्क्रिप्ट):

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

उनकी तुलना करने के लिए ( diff.shस्क्रिप्ट):

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

अच्छी बात यह है कि यह बहुत डिफ़ॉल्ट सिस्टम बायनेरिज़ का उपयोग करता है। यह सामग्री के आधार पर तुलना करने के बाद फ़ाइल पथ और उसके बाद एक MD5 गूंज findएक -execपैरामीटर पारित किया जा सकता है ।


8

अगर आपको कोई अन्य उपकरण स्थापित करने का मन नहीं है ...

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

और हाँ, इसे ढूंढा जा सकता है और क्रियान्वित या खोजा जा सकता है और आसानी से लूप में पाया जा सकता है। और, इसके अलावा, आप अंतर के आउटपुट को बहुत बढ़ा सकते हैं, इसलिए यह कहता है कि "यह फ़ाइल host1 पर है, लेकिन host2 नहीं" या कुछ इस तरह की है, लेकिन उस बिंदु पर आप बस उन उपकरणों को स्थापित कर सकते हैं जिनके बारे में हर कोई बात कर रहा है ...


5

मैंने निर्देशिका संरचनाओं की तुलना करने के लिए अतीत में डारिफ का उपयोग किया है । यह केवल स्थानीय dirs पर काम करता है इसलिए आपको sshfsअपनी अन्य निर्देशिकाओं को बनाना होगा ।

अच्छी बात यह है कि आप नेत्रहीन देख सकते हैं कि फाइलें बराबर हैं या नहीं और कौन सी नई या पुरानी है। और यह 5 डायरेक्टरी तक सपोर्ट करता है। आप भिन्नताओं को भी देख सकते हैं और फ़ाइलों को एक से दूसरे में कॉपी कर सकते हैं।


4

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.

हो सकता है यह मदद करेगा।


धन्यवाद, लेकिन यह मेरी समस्या को हल नहीं करता है (मैं वास्तव में अंतर बताने के लिए अंतर की तलाश कर रहा हूं)।
एडम मटन

4

diff -rवास्तव में काफी अच्छी तरह से काम करता है। यदि आप केवल यह जानना चाहते हैं कि क्या फाइलें भिन्न हैं, न कि अंतर की वास्तविक सामग्री, तो करेंdiff -qr


1
-rपुनरावर्ती का मतलब है, यह एक दूरस्थ होस्ट से कनेक्ट नहीं है!
माइकल हैम्पटन

3

मैं उसके लिए मेल्ड का उपयोग करूंगा।


अगर आप GUI समाधान चाहते हैं तो Meld इसके लिए वास्तव में अच्छी तरह से काम करता है।
ड्रू नॉक्स

2

खिड़कियों पर पहले से ही वर्णित उपकरणों के अलावा आप कुल कमांडर या WinSCP का उपयोग कर सकते हैं, दोनों के पास (और सिंक) निर्देशिकाओं की तुलना करने के लिए बहुत आरामदायक कार्य हैं।


0

मैं वास्तव में कुछ नया स्थापित नहीं करना चाहता था, इसलिए मेरा समाधान थोड़ा कच्चा है, लेकिन त्वरित और प्रभावी है।

मैं तुलना करना चाहता था कि सभी फाइलों को कॉपी किया गया है और उनकी फाइल मोड, स्वामित्व और SELinux सुरक्षा प्रसंग अप्रयुक्त हैं।

इसलिए मैं भागा:

rsync -aX /orig /copy/

और फिर इस तरह की तुलना करें:

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

यदि दोनों फ़ाइलों की सामग्री ढह जाती है तो वे समान हैं। यदि नहीं, तो अंतर दिखाया गया है।

lsउन विशेषताओं को प्रतिबिंबित करने के लिए पैरामीटर अपडेट करें जिनकी आपको जांच करने की आवश्यकता है। YMMV

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.