ডিরেক্টরি ডিরেক্টরি কাজ করা উচিত; উদাহরণস্বরূপ, আমি এখানে কোনও স্ক্রিপ্ট ব্যবহার করেছি (ধরে নিলাম gnu ভিন্ন),
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
... যা লিখিত সামগ্রী .svn
এবং .git
ডায়ারগুলিকে উপেক্ষা করে তবে *.zip
/ *.gz
/ ইত্যাদি নামে পৃথক পৃথক ফাইলগুলিও উপেক্ষা করে ।
সম্পাদনা করুন: ফর্মের পাথগুলি ফিল্টার করার জন্য dir_a/file1
তবে এখনও diff
একই বেসনযুক্ত ফাইলগুলি যেমন dir_b/file1
বা বা dir_a/b/file1
, তারপরে ফাইলগুলির একটি তালিকা diff
তৈরি করতে হবে (উদাহরণস্বরূপ, ব্যবহার করে find
), এবং এই পাথগুলি থেকে প্রাপ্ত ফাইলের তুলনা করার জন্য ফাইলটি; যেমন, দেওয়া
$ find ONE TWO -type f -print
ONE/a/1.txt
ONE/a/2.txt
ONE/a/b/2.txt
TWO/a/1.txt
TWO/a/2.txt
TWO/a/b/2.txt
আপনি তুলনা করতে ফাইলগুলির তালিকা তৈরি করেন, উদাহরণস্বরূপ ব্যতীত */a/2.txt
তবে এখনও নামযুক্ত অন্যান্য ফাইলের সাথে তুলনা করুন 2.txt
। কেবলমাত্র "সন্ধান করুন" ব্যতীত সমস্ত ফাইল ONE/a/2.txt
(একটি রেজি এক্সপ্যাক্টও এখানে ব্যবহার করা যেতে পারে .*/a/2.txt
)
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
যা কার্যকরভাবে উপেক্ষা করে ONE/a/2.txt
(এবং TWO/a/2.txt
), কিন্তু এখনও অন্য নামের ফাইলগুলির তুলনা করে 2.txt
:
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt
সম্পাদনা করুন: বা আরও মজাদার find
(অতিরিক্ত মজা পাঠকের জন্য অনুশীলন হিসাবে ছেড়ে দেওয়া হয়েছে), বাদ দিতে ফাইল বা ডিরেক্টরি নির্বাচন করুন এবং তারপরে diff
সমস্ত কিছু:
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
উপরের উদাহরণটিতে "{শীর্ষ} /a/2.txt", "বি" নামের যে কোনও ডিরেক্টরি, এবং অন্য সমস্ত কিছু পৃথক পৃথক ফাইল বাদ দেয়। (সরল " -name b
" এর পরিবর্তে আপনি " -regex '.*/b'
" - নোট, কোনও পিছনে "/" ব্যবহার করতে পারেন ))
diff
এর--exclude
বিকল্পটি খুব