খালি ডায়ার সন্ধান করুন
খালি ডিরেক্টরিগুলি অনুসন্ধান করার জন্য (প্রশ্নের শিরোনামে উল্লিখিত), মশকের উত্তরটি সঠিক:
find -type d -empty
তবে -emptyখুব পুরানো findসংস্করণে উপলভ্য নাও হতে পারে ( উদাহরণস্বরূপ এটি এইচপি-ইউএক্সের ক্ষেত্রে)। যদি এটি আপনার ক্ষেত্রে হয় তবে নীচের বিভাগে বর্ণিত কৌশলগুলি দেখুন ডিরেক্টরিটি কি খালি? ।
খালি ডায়ারগুলি মুছুন
এটি কিছুটা জটিল: ধরুন কোনও ডিরেক্টরিতে MyDirফাঁকা ডিরেক্টরি রয়েছে। এই খালি ডিরেক্টরিগুলি সরানোর পরে, MyDirএকটি খালি ডিরেক্টরি হয়ে যাবে এবং এটিও সরানো উচিত। অতএব আমি rmdirবিকল্পটি --parents(বা -p) দিয়ে কমান্ডটি ব্যবহার করি যা সম্ভব হলে পিতামহীন ডিরেক্টরিগুলি সরিয়ে দেয়:
find -type d -empty -exec rmdir -vp --ignore-fail-on-non-empty {} +
পুরানো findসংস্করণে বিবৃতিটি +এখনও সমর্থিত নয়, সুতরাং আপনি এর ;পরিবর্তে ব্যবহার করতে পারেন :
find -type d -empty -exec rmdir -vp --ignore-fail-on-non-empty {} `;`
একটি ডিরেক্টরি ফাঁকা?
এই উত্তরগুলির বেশিরভাগে ডিরেক্টরিটি ফাঁকা আছে কিনা তা পরীক্ষা করে দেখুন। অতএব আমি তিনটি আলাদা কৌশল এখানে জানি যা আমি জানি:
[ $(find your/dir -prune -empty) = your/dir ]
d=your/dir
if [ x$(find "$d" -prune -empty) = x"$d" ]
then
echo "empty (directory or file)"
else
echo "contains files (or does not exist)"
fi
একটি প্রকরণ:
d=your/dir
if [ x$(find "$d" -prune -empty -type d) = x"$d" ]
then
echo "empty directory"
else
echo "contains files (or does not exist or is not a directory)"
fi
ব্যাখ্যা:
find -prunefind -maxdepth 0কম অক্ষর ব্যবহার করার মতোই
find -type d ডিরেক্টরি মুদ্রণ
find -empty খালি ডিরেক্টরি এবং ফাইল মুদ্রণ
> mkdir -v empty1 empty2 not_empty
mkdir: created directory 'empty1'
mkdir: created directory 'empty2'
mkdir: created directory 'not_empty'
> touch not_empty/file
> find empty1 empty2 not_empty -prune -empty
empty1
empty2
(( ${#files} ))
এই কৌশলটি 100% bashতবে উপ-শেলটি আহরণ করে (স্প্যান করে)। ধারণাটি ব্রুনো ডি ফ্রেইনের এবং টিমবোবের মন্তব্য দ্বারা উন্নত । আপনি যদি এটি ব্যবহার করেন তবে আমি এটির পরামর্শ দিচ্ছিবাশ এবং যদি আপনার স্ক্রিপ্টটি পোর্টেবল না হয়।
files=$(shopt -s nullglob dotglob; echo your/dir/*)
if (( ${#files} ))
then
echo "contains files"
else
echo "empty (or does not exist or is a file)"
fi
দ্রষ্টব্য: খালি ডিরেক্টরি এবং অস্তিত্বহীন (এবং সরবরাহিত পথটি যদি কোনও ফাইল হয় তখনও) এর মধ্যে কোনও পার্থক্য নেই।
[ $(ls -A your/dir) ]
এই কৌতুক থেকে অনুপ্রাণিত হয় nixCraft এর নিবন্ধ 2007 সালে পোস্ট অ্যান্ড্রু টেলর 2008 সালে এর উত্তরে gr8can8dian 2011 সালে।
if [ "$(ls -A your/dir)" ]
then
echo "contains files"
else
echo "empty (or does not exist or is a file)"
fi
বা এক-লাইন বাশিজম সংস্করণ:
[[ "$(ls -A your/dir)" ]] && echo "contains files" || echo "empty or ..."
দ্রষ্টব্য: ডিরেক্টরিটি উপস্থিত না থাকলে lsফিরে আসে $?=2। তবে কোনও ফাইল এবং একটি খালি ডিরেক্টরিতে কোনও পার্থক্য নেই।