এই তুলনা করার একটি ভাল উপায় হল এর সাথে ব্যবহার find
করা md5sum
, তারপরে ক diff
।
উদাহরণ
ডিরেক্টরিতে সমস্ত ফাইল তালিকাবদ্ধ করতে অনুসন্ধান ব্যবহার করুন তারপরে প্রতিটি ফাইলের জন্য এমডি 5 হ্যাশ গণনা করুন এবং এটি ফাইলের নাম অনুসারে বাছাই করা একটি পাইপে পাইপ করুন:
find /dir1/ -type f -exec md5sum {} + | sort -k 2 > dir1.txt
অন্য ডিরেক্টরিতে একই পদ্ধতিটি করুন:
find /dir2/ -type f -exec md5sum {} + | sort -k 2 > dir2.txt
তারপরে ফলাফল দুটি ফাইলের সাথে তুলনা করুন diff
:
diff -u dir1.txt dir2.txt
অথবা প্রক্রিয়া প্রতিস্থাপন ব্যবহার করে একটি একক কমান্ড হিসাবে:
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2) <(find /dir2/ -type f -exec md5sum {} + | sort -k 2)
আপনি যদি কেবল পরিবর্তনগুলি দেখতে চান:
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ") <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ")
ডিফের সাথে তুলনা করার জন্য কাট কমান্ড কেবল হ্যাশ (প্রথম ক্ষেত্র) প্রিন্ট করে। অন্যথায় ডিফ প্রতিটি লাইনে মুদ্রণ করবে কারণ হ্যাশ একই থাকলেও ডিরেক্টরি পাথগুলি পৃথক হবে।
তবে আপনি জানেন না কোন ফাইলটি পরিবর্তন হয়েছে ...
তার জন্য, আপনি এর মতো কিছু চেষ্টা করতে পারেন
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /') <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /')
এই কৌশলটি খুব কার্যকর যখন তুলনা করতে হবে দুটি ডিরেক্টরি একই মেশিনে নেই এবং আপনার উভয় ডিরেক্টরিতে ফাইল সমান কিনা তা নিশ্চিত করতে হবে।
কাজটি করার আরও একটি ভাল উপায় হ'ল গিট-এর diff
কমান্ডটি ব্যবহার করা (ফাইলগুলির বিভিন্ন অনুমতি থাকলে সমস্যা হতে পারে -> প্রতিটি ফাইল তখন আউটপুটে তালিকাভুক্ত হয়):
git diff --no-index dir1/ dir2/
bash --version
?