উত্তর:
find . -type d -execdir sh -c '
[ "$(find "$1" -maxdepth 1 -type f -name "*.txt" -print -quit | wc -l)" -gt 0 ] &&
[ "$(find "$1" -maxdepth 1 -type f ! -name "*.txt" -print -quit | wc -l)" -eq 0 ]
' find-sh {} \; -print
বাইরের findসরবরাহের ডিরেক্টরিগুলি পরীক্ষা করতে হবে। দুই ভেতরের find-s পরীক্ষা আছে যদি কমপক্ষে একটি .txtফাইল এবং কোন অ .txtডিরেক্টরির মধ্যে ফাইল। shশেল [ … ]এবং সঙ্গে যুক্তি প্রয়োগ করে &&।
নোট:
-maxdepthপসিক্স দ্বারা প্রয়োজন হয় না। পসিক্স পদ্ধতির জন্য এই প্রশ্নটি দেখুন ।-quitপসিক্স দ্বারা প্রয়োজন হয় না। findযেকোন মিলে যাওয়া ফাইলের প্রতিবেদন হওয়ার সাথে সাথে এই ক্রিয়াটি প্রস্থান করে। এটি কার্যকর কারণ ফলাফলটি পেতে আমাদের বেশিরভাগ একটি মিলে যাওয়া ফাইলের প্রয়োজন wc -lএবং [ … ]তাই তাড়াতাড়ি ছাড়তে সময় সাশ্রয় হয়। -quitপুরো কমান্ডটি ছাড়া কাজ করবে না, যখন অনেক ফাইল থাকবে তখন এটি ধীর হবে। বিকল্পভাবে আপনি ব্যবহার করতে পারেন find … | head -n 1 | wc -l; এই ক্ষেত্রে headপাইপটি প্রথম ফাইলটি সন্ধানের পরে বন্ধ করে wcদেবে, এখনই ফলাফলটি findদেবে , তবে কেবলমাত্র (যদি) এটি অন্য একটি লাইন লেখার চেষ্টা করবে তখন ভাঙা পাইপটি লক্ষ্য করবে । এবং এটি একটি বাণিজ্য বন্ধ: headআপনার কিছু সময় এবং সংস্থান সাশ্রয় করতে পারে তবে (পৃথক প্রক্রিয়া হিসাবে) প্রতিটি ডিরেক্টরিতে দু'বার স্প্যান করার জন্য সময় এবং সংস্থান প্রয়োজন।wc -lতবে তাতে কিছু আসে যায় না কারণ এই অতিরিক্ত নতুনলাইনগুলি কেবল "ডান" গণনাটি শূন্য নয় তবেই কেবল ফলাফলটি শূন্য কিনা তা আমাদের জানতে হবে the ।
find, প্রার্থী ডিরেক্টরিগুলি অন্তত এই ধরণের ফাইল ধারণ করে এবং "কেবলমাত্র" শর্ত পরীক্ষা করে এমন স্ক্রিপ্টের মাধ্যমে আউটপুট পোস্ট-প্রক্রিয়া করি।