वहाँ एक लिनक्स उपकरण की तरह है कि पुनरावृत्ति फ़ाइलों और निर्देशिकाओं की तुलना करेगा, लेकिन यह भी तुलना के साथ: विस्तारित गुण, एसईएल, से संदर्भ?
वहाँ एक लिनक्स उपकरण की तरह है कि पुनरावृत्ति फ़ाइलों और निर्देशिकाओं की तुलना करेगा, लेकिन यह भी तुलना के साथ: विस्तारित गुण, एसईएल, से संदर्भ?
जवाबों:
मैंने इसे rsync -aHAX --delete
जोड़ने -n
और -i
झंडे को याद करने से पहले किया है ।
यह थोड़ा उल्टा है, लेकिन मेरे साथ है। मुख्य rsync
कमांड वह है जो आपको दो निर्देशिकाओं को एक साथ सिंक करने की आवश्यकता होगी। लेकिन -n -i
इसका कारण यह नहीं है कि सिंक (यानी एक सूखा रन) करें और बस यह पता करें कि यह क्या और क्यों किया है। यह पार्स करने के लिए शानदार नहीं है, लेकिन आप फ़ाइलनाम को आसानी से प्राप्त कर सकते हैं और ls
समान या पाइप कर सकते हैं ।
यह सब कुछ mtimes, दिनांक आदि के साथ-साथ डिवाइस नोड्स, सॉकेट्स, नामित पाइप आदि का पालन नहीं करेगा, ऊपर दी गई कमांड लाइन ACLs और विस्तारित विशेषताओं को भी देखती है। आप विकल्पों को बदलकर जो देख रहे हैं उसे समायोजित कर सकते हैं rsync
, इसे एक डिवाइस के साथ सीमित कर सकते हैं -x
, सॉफ्ट और हार्ड लिंक व्यवहार आदि को बदल सकते हैं।
जानोस ने पहले ही कहा था कि क्या करना है:
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
find
GNU की विशेषताएं हैं stat
। आप अलग होने से पहले आउटपुट को क्रमबद्ध करना चाहते हैं। और आपको जरूरत है (cd /a && find . ...)
अन्यथा फ़ाइल पथ में /a
बनाम के कारण सभी लाइनें अलग-अलग होंगी /b
।
यहाँ एक त्वरित बैश स्क्रिप्ट है जिसे मैंने विस्तारित विशेषताओं की तुलना करने के लिए लिखा है। यह हर फ़ाइल नाम को प्रिंट करता है, और फिर विशेषताओं में कोई अंतर:
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