Iire_and_curses এর ব্যবহারের পরামর্শটিতে tar c <dir>কিছু সমস্যা রয়েছে:
- টার ফাইল ডিরেক্টরি সিস্টেমে ডিরেক্টরি ফাইলগুলি প্রক্রিয়াকরণ করে যা তারা ফাইল সিস্টেমে সঞ্চিত রয়েছে এবং এই ক্রমটি পরিবর্তন করার কোনও উপায় নেই। যদি বিভিন্ন জায়গায় আপনার "একই" ডিরেক্টরি থাকে তবে এটি কার্যকরভাবে সম্পূর্ণরূপে পৃথক ফলাফল আনতে পারে এবং আমি এটিকে ঠিক করার কোনও উপায় জানি না (টার একটি নির্দিষ্ট ক্রমে এর ইনপুট ফাইলগুলিকে "সাজানো" করতে পারে না)।
- আমি সাধারণত গ্রুপিড এবং মালিকের সংখ্যাগুলি একই কিনা সে বিষয়ে যত্নশীল, প্রয়োজন হয় না গ্রুপ / মালিকের স্ট্রিং প্রতিনিধিত্ব একই কিনা। উদাহরণস্বরূপ
rsync -a --deleteএটি করার সাথে এটি সামঞ্জস্যপূর্ণ: এটি কার্যত সমস্ত কিছুকে বিয়োগ করে (মাইনাস এক্সটারস এবং অ্যাকসেল), তবে এটি স্ট্রিং প্রতিনিধিত্বের ভিত্তিতে নয় বরং তাদের আইডির ভিত্তিতে মালিক এবং গোষ্ঠীটিকে সিঙ্ক করবে। সুতরাং আপনি যদি অন্য কোনও সিস্টেমে সিঙ্ক করে থাকেন তবে অগত্যা একই ব্যবহারকারী / গোষ্ঠী নেই তবে আপনার --numeric-ownerপতাকাটি টারে যুক্ত করা উচিত
- ডারটি আপনি যে ডিরেক্টরিটি নিজে যাচাই করছেন তার ফাইলের নাম অন্তর্ভুক্ত করবে, সচেতন হওয়ার মতো কিছু।
যতক্ষণ না প্রথম সমস্যার কোনও সমাধান নেই (বা আপনি নিশ্চিত না হন যে এটি আপনাকে প্রভাবিত করে না), আমি এই পদ্ধতির ব্যবহার করব না।
findউপরে প্রস্তাবিত ভিত্তিক সমাধান এছাড়াও কোন ভাল, কারণ তারা শুধুমাত্র ফাইল, না ডিরেক্টরি, যা একটি বিষয় যদি checksumming মন খালি ডিরেক্টরিগুলি থেকে রাখা উচিত হয়ে তালিকায় রয়েছে।
পরিশেষে, সর্বাধিক প্রস্তাবিত সমাধানগুলি ধারাবাহিকভাবে বাছাই করে না কারণ সিস্টেমগুলি জুড়ে কোলেশন আলাদা হতে পারে।
এই সমাধানটি আমি নিয়ে এসেছি:
dir=<mydir>; (find "$dir" -type f -exec md5sum {} +; find "$dir" -type d) | LC_ALL=C sort | md5sum
এই সমাধান সম্পর্কে নোট:
LC_ALL=Cসিস্টেম জুড়ে নির্ভরযোগ্য সাজানোর ক্রম নিশ্চিত
- এটি "w nwithanewline নামক একটি ডিরেক্টরি" এবং "নামের" এবং "উইথনওলাইন" নামের দুটি ডিরেক্টরিতে পার্থক্য দেখায় না, তবে ঘটনার সম্ভাবনা খুব কমই বলে মনে হয়। একটি সাধারণত এটি
-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
ভাগ্যক্রমে, আমার নামে নতুন ফাইলগুলি যুক্ত ফাইল / ডিরেক্টরি নেই, সুতরাং এটি সেই সিস্টেমে কোনও সমস্যা নয়।