@ নিফেল থেকে দুর্দান্ত উত্তর ব্যবহার করে, তবে আপনার নির্দিষ্টকরণ সহ চেষ্টা করুন:
% find /Volumes/WD -type d -name *[TEST]* | while read a; do if [ ! -f $a/Data.log ]; then echo $a; fi; done
এই ওয়ান-লাইনারটি ভাঙ্গা হচ্ছে:
find /Volumes/WD -type d -name *[TEST]*: /Volumes/WDআপনার বাহ্যিক এইচডি থেকে ফাইল ট্রিটি চলাফেরা করে ডিরেক্টরিগুলি ( -type d) যা [TEST]তাদের নামে ( -name *[TEST]*) কোথাও রয়েছে for
findকমান্ড থেকে আউটপুটটি লুপের |মধ্যে পাইপ করা হয় (যা ) bash whileমিলিয়ে যাওয়া ডিরেক্টরিগুলি একবারে একটি ভেরিয়েবলের মধ্যে সংরক্ষণ করে তা বের করে দেয় a।
লুপের মধ্যে:
ifবিবৃতি চেক যে ফাইল Data.logডিরেক্টরির মধ্যে নয় বিবেচনা করা হচ্ছে। ইন ifবিবৃতি $aযাতে প্রসারিত করা হয় $a/Data.logমত একটি পথ /Volumes/WD/<dir1>/<dir2>/Data.log। পরীক্ষা আপনি আগ্রহী পেতে !এবং -fব্যবহার করা হয় যাতে শুধুমাত্র ক্ষেত্রে যেখানে এই নামের একটি ফাইল উপস্থিত না থাকলে নির্ণয় করা হবে TRUE( !হয় NOT, এবং -fডিরেক্টরি বা লিঙ্ক মত ফাইলসিস্টেম এন্ট্রি অন্য কোনো ধরনের একটি ফাইল বদলে ইঙ্গিত)।
- অবশেষে, আমরা যদি কোনও মিলে যাওয়া ডিরেক্টরিটি পাই তবে এটি মুদ্রিত হবে
echo $aযেখানে $aপাইপ ইন করা ডিরেক্টরী নাম দ্বারা উপরে স্থান দেওয়া হয়েছে find।
আমি জানি আমি পূর্ববর্তী উত্তরটি পুনঃভাগ করছি, তবে আমি আশা করি এটি @ নিফলের সামনে দেওয়া দুর্দান্ত ওয়ান-লাইনারে যা চলছে তা পরিষ্কার হয়ে যায় এবং আপনার সমস্যার সমাধান হয়ে যায়।