linux - दो निर्देशिका पेड़ दिए गए, मैं कैसे पता लगा सकता हूं कि कौन सी फाइलें भिन्न हैं?




bash shell (6)

अगर मैं दो निर्देशिका पेड़ों के बीच मतभेदों को ढूंढना चाहता हूं, तो मैं आमतौर पर निष्पादित करता हूं:

diff -r dir1/ dir2/

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

कोई सुझाव?


आप Rsync also इस्तेमाल कर सकते also और find सकते findfind के find :

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

लेकिन एक ही नाम वाली फाइलें और एक ही उपफोल्डर में, लेकिन विभिन्न सामग्री के साथ, सूचियों में नहीं दिखाया जाएगा।

यदि आप जीयूआई के प्रशंसक हैं, तो आप उस देख सकते हैं जो ने उल्लेख किया है। यह विंडोज़ और लिनक्स दोनों में ठीक काम करता है।


आपने लिनक्स कहा, तो आप भाग्यशाली हैं (कम से कम यह उपलब्ध होना चाहिए, यह सुनिश्चित नहीं होना चाहिए कि यह कब जोड़ा गया था):

diff --brief -r dir1/ dir2/

आपको जो चाहिए वह करना चाहिए।

यदि आप उन फ़ाइलों के लिए अंतर देखना भी चाहते हैं जो निर्देशिका में मौजूद नहीं हो सकते हैं:

diff --brief -Nr dir1/ dir2/

चैनल कंपैट्रियट 'बिलिंग्स' (फ्रीनोड / # सेंटोस प्रसिद्धि के) ने मेरे साथ अपनी विधि साझा की:

diff -Naur dir1/ dir2

अंतिम निर्देशिका आगे स्लैश सहित कोई फर्क नहीं पड़ता।

साथ ही, ऐसा लगता है कि -u विकल्प diff के कुछ पुराने / सर्वर संस्करणों पर उपलब्ध नहीं है।

Diffs में अंतर:

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST

# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ

दो निर्देशिकाओं की तुलना करने के लिए Meld भी एक अच्छा उपकरण है:

meld dir1/ dir2/

मेल्ड में फ़ाइलों या निर्देशिकाओं की तुलना करने के लिए कई विकल्प हैं। यदि दो फाइलें भिन्न होती हैं, तो फ़ाइल तुलना मोड दर्ज करना और सटीक अंतर देखना आसान है।


मैं जिस कमांड का उपयोग करता हूं वह है:

diff -qr dir1/ dir2/

यह मार्क के समान ही है :) लेकिन उसके जवाब ने मुझे परेशान किया क्योंकि यह विभिन्न प्रकार के झंडे का उपयोग करता है, और इससे मुझे दो बार देखा जाता है। मार्क के अधिक वर्बोज़ झंडे का उपयोग करना यह होगा:

diff  --brief --recursive dir1/ dir2/

पोस्टिंग के लिए मैं क्षमा चाहता हूं जब दूसरा जवाब पूरी तरह से स्वीकार्य है। खुद को रोक नहीं सका ... कम pedantic होने पर काम कर रहा है।


ये दो आदेश मूल रूप से इस बात की मांग करते हैं:

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

rsync --recursive --delete --links --checksum --verbose --dry-run /dir1/ /dir2/ > dirdiff_2.txt

उनके बीच चुनाव dir1 और dir2 के स्थान पर निर्भर करता है:

जब निर्देशिका दो अलग ड्राइव पर रहते हैं, तो difsformss rsync। लेकिन जब तुलना की गई दो निर्देशिका एक ही ड्राइव पर हैं, तो rsync तेज़ है। ऐसा इसलिए है क्योंकि diff दोनों निर्देशिकाओं पर समानांतर, अधिकतम ड्राइव दोनों ड्राइव पर लगभग बराबर भार डालता है।

वास्तव में तुलना करने से पहले rsync बड़े हिस्सों में चेकसम की गणना करता है। यह समूह बड़े हिस्से में I / O संचालन करता है और एक ड्राइव पर चीजें होने पर एक अधिक कुशल प्रसंस्करण की ओर जाता है।






diff