ire_and_curses के उपयोग के सुझाव tar c <dir>
में कुछ समस्याएं हैं:
- टार डायरेक्टरी प्रविष्टियों को उस क्रम में संसाधित करता है जिसे वे फाइलसिस्टम में संग्रहित करते हैं, और इस क्रम को बदलने का कोई तरीका नहीं है। यह प्रभावी रूप से पूरी तरह से अलग परिणाम दे सकता है यदि आपके पास अलग-अलग स्थानों पर "समान" निर्देशिका है, और मुझे पता है कि इसे ठीक करने का कोई तरीका नहीं है (किसी विशेष क्रम में इसकी इनपुट फ़ाइलों को टार नहीं कर सकता है)।
- मैं आमतौर पर इस बात की परवाह करता हूं कि क्या समूह और मालिक संख्या समान हैं, जरूरी नहीं कि समूह / स्वामी का स्ट्रिंग प्रतिनिधित्व समान हो। यह उदाहरण के लिए क्या
rsync -a --delete
करता है के साथ है: यह वस्तुतः सब कुछ (माइनस xattrs और acls) को सिंक्रनाइज़ करता है, लेकिन यह स्वामी और समूह को उनकी आईडी के आधार पर सिंक करेगा, न कि स्ट्रिंग प्रतिनिधित्व पर। इसलिए यदि आपने एक अलग प्रणाली को सिंक किया है, जिसमें जरूरी नहीं कि समान उपयोगकर्ता / समूह हों, तो आपको --numeric-owner
ध्वज को टार में जोड़ना चाहिए
- टार में उस निर्देशिका का फ़ाइल नाम शामिल होगा जिसे आप स्वयं जाँच रहे हैं, बस कुछ के बारे में पता होना चाहिए।
जब तक पहली समस्या के लिए कोई ठीक नहीं है (या जब तक आप सुनिश्चित नहीं हैं कि यह आपको प्रभावित नहीं करता है), मैं इस दृष्टिकोण का उपयोग नहीं करूंगा।
find
ऊपर प्रस्तावित आधारित समाधान भी अच्छा नहीं है क्योंकि वे केवल फ़ाइलें, नहीं निर्देशिका है, जो एक मुद्दा अगर आप checksumming मन खाली निर्देशिका में रखना चाहिए हो जाता है शामिल हैं।
अंत में, अधिकांश सुझाए गए समाधान लगातार क्रमबद्ध नहीं होते हैं, क्योंकि कोलाज पूरे सिस्टम में भिन्न हो सकते हैं।
यह वह उपाय है जो मैं लेकर आया हूं:
dir=<mydir>; (find "$dir" -type f -exec md5sum {} +; find "$dir" -type d) | LC_ALL=C sort | md5sum
इस समाधान के बारे में नोट्स:
LC_ALL=C
सिस्टम में विश्वसनीय छंटाई सुनिश्चित करने के लिए है
- यह एक निर्देशिका "नामित \ nwithanewline" और दो निर्देशिकाओं "नाम" और "withanewline" के बीच अंतर नहीं करता है, लेकिन इस बात की संभावना बहुत कम लगती है। एक आमतौर पर इसे एक
-print0
ध्वज के साथ ठीक करता है , find
लेकिन चूंकि यहां अन्य सामान चल रहा है, मैं केवल समाधान देख सकता हूं जो कमांड को अधिक जटिल बना देगा फिर यह लायक है।
पुनश्च: मेरे सिस्टम में से एक सीमित व्यस्त बॉक्स का उपयोग करता है find
जो -exec
न तो -print0
झंडे का समर्थन करता है , और न ही यह निर्देशिकाओं को निरूपित करने के लिए '/' को जोड़ता है, जबकि ढूंढने में लगता नहीं है, इसलिए इस मशीन के लिए मुझे चलाने की आवश्यकता है:
dir=<mydir>; (find "$dir" -type f | while read f; do md5sum "$f"; done; find "$dir" -type d | sed 's#/$##') | LC_ALL=C sort | md5sum
सौभाग्य से, मेरे पास उनके नाम की नई लाइनों के साथ कोई फाइल / निर्देशिका नहीं है, इसलिए यह उस प्रणाली पर कोई समस्या नहीं है।