क्या लिनक्स में गहरा अंतर उपकरण है जो फ़ाइल विशेषताओं की तुलना करता है?


17

वहाँ एक लिनक्स उपकरण की तरह है कि पुनरावृत्ति फ़ाइलों और निर्देशिकाओं की तुलना करेगा, लेकिन यह भी तुलना के साथ: विस्तारित गुण, एसईएल, से संदर्भ?


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

जवाबों:


7

मैंने इसे rsync -aHAX --deleteजोड़ने -nऔर -iझंडे को याद करने से पहले किया है ।

यह थोड़ा उल्टा है, लेकिन मेरे साथ है। मुख्य rsyncकमांड वह है जो आपको दो निर्देशिकाओं को एक साथ सिंक करने की आवश्यकता होगी। लेकिन -n -iइसका कारण यह नहीं है कि सिंक (यानी एक सूखा रन) करें और बस यह पता करें कि यह क्या और क्यों किया है। यह पार्स करने के लिए शानदार नहीं है, लेकिन आप फ़ाइलनाम को आसानी से प्राप्त कर सकते हैं और lsसमान या पाइप कर सकते हैं ।

यह सब कुछ mtimes, दिनांक आदि के साथ-साथ डिवाइस नोड्स, सॉकेट्स, नामित पाइप आदि का पालन नहीं करेगा, ऊपर दी गई कमांड लाइन ACLs और विस्तारित विशेषताओं को भी देखती है। आप विकल्पों को बदलकर जो देख रहे हैं उसे समायोजित कर सकते हैं rsync, इसे एक डिवाइस के साथ सीमित कर सकते हैं -x, सॉफ्ट और हार्ड लिंक व्यवहार आदि को बदल सकते हैं।


2

जानोस ने पहले ही कहा था कि क्या करना है:

find /a -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >a
find /b -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >b

diff -u a b

और man 1 statकहता है:

%A     access rights in human readable form
%C     SELinux security context string
%F     file type
%g     group ID of owner
%u     user ID of owner
%s     total size, in bytes
%Y     time of last modification, seconds since Epoch
%n     file name

आपके द्वारा उपयोग की जा सकने वाली फ़ाइल सामग्री की तुलना करने के लिए:

find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-

as described here: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash

यह समाधान एक व्यावहारिक समाधान प्रदान नहीं करता है। जो अंतर प्रदर्शित किया गया है वह संदर्भ मुक्त है और पढ़ने में बहुत कठिन है। मैं एक ऐसी चीज की तलाश में हूं जो मुझे एक फ़ाइल नाम दिखा सके और इसके बारे में क्या अलग है। दो पाए जाने पर एक अंतर नहीं है जो एक पूरी तरह से अलग जानवर है।
माइकल गैंटज

1
GNU में (और दशकों से GNU स्टेट को पूर्ववर्ती) findGNU की विशेषताएं हैं stat। आप अलग होने से पहले आउटपुट को क्रमबद्ध करना चाहते हैं। और आपको जरूरत है (cd /a && find . ...)अन्यथा फ़ाइल पथ में /aबनाम के कारण सभी लाइनें अलग-अलग होंगी /b
स्टीफन चेज़लस

0

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

cd a
export relpath=[path/to/b/from/a]

for filename in $(find .);
do
    echo $filename;
    diff <(xattr -l $filename) <(xattr -l $relpath/$filename);
done

दूसरे उत्तर से उधार लेना, हम statइसके बदले उपयोग करने के लिए इसे संशोधित कर सकते हैं xattr:

for filename in $(find .);
do
    echo $filename;
    diff <(stat -c '%A %C %F %g %u %s %Y' $filename) <(stat -c '%A %C %F %g %u %s %Y' $relpath/$filename);
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.