যে কোনও কিছুতে জড়িত থাকার ls
ফলে বিশেষ চরগুলি (স্থান এবং অন্যান্য চিহ্ন) দিয়ে অপ্রত্যাশিত ফলাফল পাওয়া সম্ভব। কোনও বাশিজম (অ্যারেগুলির মতো) বহনযোগ্য নয়। জড়িত while read
যে কোনও কিছু সাধারণত ধীর হয়।
অন্যদিকে, find
এটি খুব নমনীয় (ফিল্টার করার জন্য প্রচুর বিকল্প), এতে [কমপক্ষে] দুটি বাক্য গঠন রয়েছে যা বিশেষ অক্ষরের জন্য নিরাপদে ব্যর্থ হয় ... এবং এটি বৃহত ডিরেক্টরিতে ভাল স্কেল করে।
এই উদাহরণস্বরূপ, আমি -iname
উপরের এবং নিম্ন উভয় ক্ষেত্রেই এক্সটেনশনের নামের সাথে মিল রেখেছি । -maxdepth 1
আপনার প্রশ্নের "বর্তমান ডিরেক্টরিতে" সম্মান করার বিষয়টিও আমি সীমাবদ্ধ করেছি । লাইনের সংখ্যা গণনা করার পরিবর্তে, যেখানে ফাইলের নামগুলি সিআর / এলএফ অন্তর্ভুক্ত করতে পারে -print0
, প্রতিটি ফাইলের নামের শেষে একটি ন্যুয়াল বাইট প্রিন্ট করবে ... ঠিক তেমনি | tr -d -c "\000" | wc -l
ফাইলগুলি গণনা করা হচ্ছে (ন্যুয়াল বাইটস!)।
extensions="jpg png gif"
for ext in $extensions; do
c=$(find . -maxdepth 1 -iname "*.$ext" -print0 | tr -d -c "\000" | wc -c)
if [ $c -gt 0 ]; then
echo "Found $c *.$ext files"
find . -maxdepth 1 -iname "*.$ext" -print0 | xargs -0 -r -n1 DOSOMETHINGHERE
# or # find . -maxdepth 1 -iname "*.$ext" -exec "ls" "-l" "{}" ";"
fi
done
পিএস -print0 | tr -d -c "\000" | wc -c
সঙ্গে -printf "\000" | wc -c
বা এমনকি প্রতিস্থাপন করা যেতে পারে -printf '\n' | wc -l
।