এই ওয়ান-লাইনারটি বেশ শক্তিশালী পদ্ধতি বলে মনে হচ্ছে:
find . -type f -printf '%f\n' | sed -r -n 's/.+(\..*)$/\1/p' | sort | uniq -c
find . -type f -printf '%f\n'
কপি করে প্রিন্ট গাছ প্রতি নিয়মিত ফাইলের basename, কোন ডিরেক্টরি সঙ্গে। যে ডিরেক্টরি যা থাকতে পারে সম্পর্কে চিন্তা করতে হচ্ছে ঘটিয়েছে .
আপনার তাদের 's sed
Regex।
sed -r -n 's/.+(\..*)$/\1/p'
আগত ফাইলের নামটি কেবলমাত্র তার এক্সটেনশান দ্বারা প্রতিস্থাপন করে। যেমন, .somefile.ext
হয়ে যায় .ext
। .+
রেজেক্সে প্রাথমিকটি নোট করুন ; এক্সটেনশনের আগে কমপক্ষে একটি চরিত্রের প্রয়োজন হয় এমন কোনও মিলের ফলস্বরূপ .
। এটি ফাইল নামগুলি .gitignore
যেমন কোনও নাম না থাকা এবং এক্সটেনশন '.gitignore' হিসাবে বিবেচনা করা থেকে বাধা দেয় যা সম্ভবত আপনি চান। যদি না হয়, প্রতিস্থাপন .+
একটি সঙ্গে .*
।
বাকী রেখাটি গৃহীত উত্তর থেকে।
সম্পাদনা করুন : আপনি যদি পেরেটো চার্ট ফর্ম্যাটে সুন্দরভাবে সাজানো হিস্টোগ্রাম চান sort
তবে শেষের দিকে আরও একটি যুক্ত করুন:
find . -type f -printf '%f\n' | sed -r -n 's/.+(\..*)$/\1/p' | sort | uniq -c | sort -bn
বিল্ট লিনাক্স উত্স ট্রি থেকে নমুনা আউটপুট:
1 .1992-1997
1 .1994-2004
1 .1995-2002
1 .1996-2002
1 .ac
1 .act2000
1 .AddingFirmware
1 .AdvancedTopics
[...]
1445 .S
2826 .o
2919 .cmd
3531 .txt
19290 .h
23480 .c