निर्देशिका (लाइनक्स) के बीच अंतर की तुलना कैसे करें


24

मेरे पास दो निर्देशिकाएं हैं - एक पहले बैकअप से और दूसरी नई बैकअप से। मैं कैसे तुलना करूं कि लिनक्स पर नवीनतम बैकअप से निर्देशिका में फ़ाइलों में क्या परिवर्तन किए गए थे? उदाहरण के लिए मैं टेक्स्ट और php फ़ाइलों के लिए परिवर्तनों को कैसे प्रदर्शित करता हूँ - मैं विकिपीडिया पर संशोधन इतिहास जैसी किसी चीज़ के बारे में सोच रहा हूँ जहाँ आप स्क्रीन के एक तरफ पुराना संस्करण देखते हैं और दूसरे संस्करण पर नवीनतम संस्करण और परिवर्तन हाइलाइट किए जाते हैं। मैं ऐसा कुछ कैसे हासिल करूं?

संपादित करें: मैं स्थानीय के साथ रिमोट डायर की तुलना कैसे करूं ?

जवाबों:


35

अलग आदमी पेज से:

यदि फ़ाइल और फ़ाइल दोनों निर्देशिकाएं हैं, तो दोनों निर्देशिकाओं में संगत फ़ाइलों की तुलना वर्णमाला क्रम में करें; जब तक -r या --recursive विकल्प नहीं दिया जाता है, तब तक यह तुलना पुनरावर्ती नहीं है। डिफरेंशियल डायरेक्टरी की वास्तविक सामग्री की तुलना कभी नहीं करता है जैसे कि यह एक फाइल थी। पूरी तरह से निर्दिष्ट फ़ाइल मानक इनपुट नहीं हो सकती है, क्योंकि मानक इनपुट नाम रहित है और '' समान नाम वाली फ़ाइल '' की धारणा लागू नहीं होती है।

इसलिए निर्देशिकाओं की तुलना करने के लिए: diff --brief -r dir1 dir2

फ़ाइलों की तुलना पक्ष द्वारा करने के लिए: diff --side-by-side file1 file2


बहुत अच्छा है, मैं इसे एक कोशिश दे दूँगा
फिल

... मुझे आश्चर्य है कि मैं दूरस्थ निर्देशिका की तुलना स्थानीय एक से कैसे करूं?
फिल

1
आपको दूरस्थ निर्देशिका को स्थानीय मशीन पर माउंट करना होगा। हालाँकि, आप दूरस्थ रूप से फ़ाइलों की तुलना इस तरह कर सकते हैं: ssh REMOTE_SERVER "बिल्ली / पथ / से / कुछ / फ़ाइल" | diff --side-by-side / path-to-some-file - एक और बात, अगर आप कुछ टाइपिंग को सेव करना चाहते हैं, तो 'sdiff' कमांड 'diff -side-by-side' की तरह काम करता है।
शॉन स्टैट

2
दूरस्थ निर्देशिका माउंट करने के लिए NFS का उपयोग करें। रिमोट सर्वर (सर्वर-बी) पर, संपादित करें / आदि / निर्यात करें और इसमें निम्नलिखित डालें: / पथ / / निर्देशिका / के लिए / शेयर सर्वर-a.ip.address (आरओ, no_root_squash) सर्वर-बी में एनएफएस प्रारंभ करें (/etc/init.d/nfs start) निम्नलिखित को / etc / fstab में जोड़कर अपने स्थानीय सर्वर (सर्वर-ए) पर माउंट करें: server-b.ip.add: / path / of / directory / to / share / mnt / server-b nfs rsize = 32768, wsize = 32768, rw 0 0 इसके बाद सर्वर-ए, mkdir / mnt / server-b पर; माउंट / mnt / सर्वर-बी upvotes के लिए धन्यवाद।
सीन स्टैट्स

2
आप sshfsNFS का उपयोग करने के बजाय एक तदर्थ अस्थायी नेटवर्क निर्देशिका बनाने के लिए उपयोग कर सकते हैं ।
दान एंड्रीटा

3

मान लिया जाये कि:

  • हम www1रिमोट के साथ तुलना कर रहे हैंwww2
  • लोकल से www1लेकर रिमोट तक पब्लिक की ऑथेंटिकेशन हैwww2
  • हम स्थानीय www1और रिमोट पर समान उपयोगकर्ता की तुलना करते हैंwww2
find / var / www / html / -name "*" -exec md5sum -b {} \; | grep -v "/ var / www / html / बहिष्कृत_थिरस dir"> local.md5
ssh www2 "ढूँढें / var / www / html / -name '*' -exec md5sum -b {}}; grep -v / var / www / html / बहिष्कृत_हिरों dir> Remote.md5 |
scp www2: Remote.md5
diff.md5 दूरस्थ.md5 

3

आप वास्तव में rsyncबैंडविड्थ की खपत को कम करने की शक्ति के साथ गठबंधन करना चाहते हैं diffताकि आप लचीला, अच्छी तरह से अलग हो सकें।

तो कुछ इस तरह:

cp -R $local $bak
rsync $server:$remdir/* $local/
rsync $local/ $server:$remdir/* 
diff -wur $local $bak

मुझे लगता है कि आप इसे थोड़ा मोड़ सकते हैं यदि आप इसे पहली पंक्ति के rsyncबजाय अक्सर उपयोग कर रहे थे cp- जाहिर है अंतिम पंक्ति में आपके पास diffइसे प्रारूपित करने की पूरी शक्ति है, लेकिन आप इसे पसंद करते हैं। संभवतः ओपी मामले में y के साथ

इस दृष्टिकोण के नीचे आप दो बार से अधिक स्थानीय स्थान का उपयोग कर रहे हैं, लेकिन कम से कम $ 1 / टमटम पर कौन परवाह करता है?


cp --reflink=auto --sparse=alwaysअंतर्निहित FS के आधार पर प्रतिलिपि के लिए कोई स्थान का उपयोग करने के लिए नहीं।
टॉम हेल

1

क्या diff old_dir new_dir > diff.txtएक ही सर्वर पर पक्ष मतभेद से कंधा मिलाकर के लिए।

दूरस्थ फ़ाइलों के लिए:

उदाहरण के लिए: ABC मौजूदा सर्वर है और XYZ आपका रिमोट सर्वर है और डायरेक्टरी का नाम 123 है।

चरण 1: एबीसी सर्वर पर 123_ABC के रूप में मौजूदा निर्देशिका 123 का नाम बदलें।

ABC:/Home > mv 123 123_ABC

चरण 2: सर्वर ABC पर एक नई निर्देशिका बनाएँ:

ABC: > mkdir 123_XYZ

चरण 3: एबीसी सर्वर पर XYZ सर्वर पर निर्देशिका 123 से सभी फ़ाइलों की प्रतिलिपि 123_XYZ निर्देशिका पर:

XYZ/123 > scp * userid@ABC: /123_XYZ

यह आपके XYZ सर्वर पर निर्देशिका से सभी फ़ाइलों को आपके ABC सर्वर / 123_XYZ निर्देशिका में कॉपी कर देगा।

चरण: 4: दोनों निर्देशिकाओं के बीच अंतर करें:

अब एबीसी सर्वर पर जाएं और 123_ABC और 123_XYZ के बीच अंतर करें

ABC > diff 123_ABC 123_XYZ > diff.txt

ऊपर दिए गए आदेश में अलग-अलग परिणाम दिखाई देंगे।

आप तब मतभेदों की तुलना कर सकते हैं।

धन्यवाद,

मेहुल


0

AIDE एडवांस्ड इंट्रूज़न डिटेक्शन एनवायरनमेंट (AIDE) UNIX ऑपरेटिंग सिस्टम के लिए एक फ़ाइल अखंडता चेकर है। समर्थित फ़ाइल सिस्टम पर डेटा की अखंडता पर रिपोर्टिंग प्रदान करने का इसका उद्देश्य है। लक्ष्य होस्ट पर कई बार AIDE चलाकर आप यह निर्धारित कर सकते हैं कि फ़ाइलें क्या बदल रही हैं। विभिन्न होस्ट्स पर कई बार AIDE चलाकर आप यह निर्धारित कर सकते हैं कि फाइलें और अनुमतियां अलग-अलग हैं। फिर रिपोर्ट की गई "अलग" फाइलों पर एक गुई डिफर टूल का उपयोग करें।

या मेल्ट, गुडी, केडीएफ 3, डिफ, विम्डीफ, ग्विम्डीफ, एमाक्स, कोम्पर, डिफ्यूज, इजीडेफ, टीकेडीएफ या एक्सएक्सडीफ जैसे गाई डिफरेंट टूल का उपयोग करें। ज्यादातर फ़ाइल डिफरेंश के अलावा डायरेक्टरी डिफरेंट करती है। आपको एनएफएस, एसएमबीएफएस या एसएसएचएफएस का उपयोग करके रिमोट ड्राइव को माउंट करना होगा जैसा कि अन्य ने उल्लेख किया है।


0

या आप फ़ाइलों की सूची के आउट पुट के साथ दो फ़ाइलों का उपयोग कर सकते हैं। और फिर उन दो फाइलों की तुलना करें। उदाहरण के लिए:

/path/to/compare/remote$: ls > remote-files 

/path/to/compare/local$: ls > local-files 

फ़ाइलों में से एक डाउनलोड करें।

-rw-r - r-- 1 1015 1015 26624 2005-06-14 13:10 File.TXT  

फाइल करने के लिए

diff -y remote-files local-files > diff-filesउनकी तरफ से तुलना करने के लिए diff ( ) का उपयोग करें । अंतर-फाइलें खोलें और इसे जांचें। प्रत्येक पंक्ति के साथ> का अर्थ एक अलग फ़ाइल है।

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