উত্তর:
এটি চেষ্টা করুন (এটি সর্বোত্তম উপায় কিনা তা নিশ্চিত নয়) তবে এটি কার্যকর হয়):
find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u
এটি নিম্নলিখিত হিসাবে কাজ করে:
git ls-tree -r HEAD --name-only
করুনfind
find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort | uniq -c | sort -n
পাইপের দরকার নেই sort
, অ্যাডক সব কিছু করতে পারে:
find . -type f | awk -F. '!a[$NF]++{print $NF}'
alias
কমান্ডের উদ্ধৃতি সহ পুরো ওয়ান-লাইনারকে ঘিরে চেষ্টা করছেন তবে কমান্ড নিজেই ফাইন্ড কমান্ডে উদ্ধৃতি ব্যবহার করেছে । এটি ঠিক করার জন্য আমি bash
এর আক্ষরিক স্ট্রিং সিনট্যাক্সটি ব্যবহার করব :alias file_ext=$'find . -type f -name "*.*" | awk -F. \'!a[$NF]++{print $NF}\''
maindir/test.dir/myfile
-printf "%f\n"
' কমান্ডের শেষে যুক্ত করুন এবং আপনার পরীক্ষাটি আবার চালান।
পুনরাবৃত্ত সংস্করণ:
find . -type f | sed -e 's/.*\.//' | sed -e 's/.*\///' | sort -u
আপনি যদি মোট চান (কিভাবে বারের মতো এক্সটেনশনটি দেখা হয়েছিল):
find . -type f | sed -e 's/.*\.//' | sed -e 's/.*\///' | sort | uniq -c | sort -rn
অ-পুনরাবৃত্ত (একক ফোল্ডার):
for f in *.*; do printf "%s\n" "${f##*.}"; done | sort -u
আমি এই ফোরাম পোস্ট উপর ভিত্তি করে করেছি , ক্রেডিট সেখানে যেতে হবে।
git show --name-only --pretty="" | sed -e 's/.*\.//' | sed -e 's/.*\///' | sort -u
শক্তির উৎস:
dir -recurse | select-object extension -unique
আপনাকে ধন্যবাদ http://kevin-berridge.blogspot.com/2007/11/windows-powershell.html
.
মধ্যে একটি রয়েছে (যেমন আউটপুট jquery-1.3.4
হিসাবে প্রদর্শিত হবে .4
)। dir -file -recurse | select-object extension -unique
কেবলমাত্র ফাইল এক্সটেনশানগুলি পেতে পরিবর্তন করুন।
আমার অ্যাজ-কম, সিড-কম, পার্ল-কম, পাইথন-কম পসিক্স-কমপ্লায়েন্ট বিকল্প:
find . -type f | rev | cut -d. -f1 | rev | tr '[:upper:]' '[:lower:]' | sort | uniq --count | sort -rn
কৌশলটি হ'ল এটি লাইনটি উল্টায় এবং শুরুতে এক্সটেনশনটি কেটে দেয়।
এটি এক্সটেনশানগুলিকে লোয়ার কেসে রূপান্তর করে।
উদাহরণ আউটপুট:
3689 jpg
1036 png
610 mp4
90 webm
90 mkv
57 mov
12 avi
10 txt
3 zip
2 ogv
1 xcf
1 trashinfo
1 sh
1 m4v
1 jpeg
1 ini
1 gqv
1 gcs
1 dv
uniq
পুরো পতাকা নেই --count
, কিন্তু -c
ঠিক কাজ করে
বিন্দুর সাহায্যে এরিথিন খুঁজুন এবং কেবল প্রত্যয়টি দেখান show
find . -type f -name "*.*" | awk -F. '{print $NF}' | sort -u
যদি আপনি জানেন তবে সমস্ত প্রত্যয়টির 3 টি অক্ষর রয়েছে
find . -type f -name "*.???" | awk -F. '{print $NF}' | sort -u
বা সেড সহ এক থেকে চারটি অক্ষরের সাথে সমস্ত প্রত্যয় দেখায়। আপনি প্রত্যয়টির প্রত্যাশা করছেন এমন অক্ষরের পরিসীমাটিতে {1,4 Change পরিবর্তন করুন।
find . -type f | sed -n 's/.*\.\(.\{1,4\}\)$/\1/p'| sort -u
-name "."
জিনিসটির অর্থ কী তা সম্পর্কে পুরোপুরি নিশ্চিত নন কারণ এটি ইতিমধ্যে এটি
মিশ্রণটিতে আমার নিজস্ব প্রকরণটি যুক্ত করা হচ্ছে। আমি মনে করি এটি অনেকটা সহজ এবং দক্ষতা যখন বড় উদ্বেগ না হয় তখন এটি কার্যকর হতে পারে।
find . -type f | grep -o -E '\.[^\.]+$' | sort -u
$ find . -type f | grep -o -E '\.[^.\/]+$' | sort -u
পাইথনে খালি এক্সটেনশান সহ খুব বড় ডিরেক্টরিগুলির জন্য জেনারেটর ব্যবহার করে এবং প্রতিটি এক্সটেনশানটি প্রদর্শিত হওয়ার সময় পাওয়া:
import json
import collections
import itertools
import os
root = '/home/andres'
files = itertools.chain.from_iterable((
files for _,_,files in os.walk(root)
))
counter = collections.Counter(
(os.path.splitext(file_)[1] for file_ in files)
)
print json.dumps(counter, indent=2)
আমি এখানে কয়েকটি উত্তর, এমনকি "সেরা" উত্তর চেষ্টা করেছি। আমি বিশেষত যা পরেছিলাম সেগুলি সম্পর্কে তারা সকলেই সংক্ষেপে এসেছিল। সুতরাং একাধিক প্রোগ্রামের জন্য রেজেক্স কোডে বসে 12 ঘন্টা ছাড়াও এবং এই উত্তরগুলি পড়া এবং পরীক্ষা করার জন্য এটি আমি এসেছি যা আমার মতো ঠিক কাজ করে।
find . -type f -name "*.*" | grep -o -E "\.[^\.]+$" | grep -o -E "[[:alpha:]]{2,16}" | awk '{print tolower($0)}' | sort -u
আপনার যদি ফাইল এক্সটেনশনের একটি গণনা প্রয়োজন তবে নীচের কোডটি ব্যবহার করুন
find . -type f -name "*.*" | grep -o -E "\.[^\.]+$" | grep -o -E "[[:alpha:]]{2,16}" | awk '{print tolower($0)}' | sort | uniq -c | sort -rn
যদিও এই পদ্ধতিগুলি সম্পূর্ণ হতে কিছুটা সময় নেবে এবং সম্ভবত সমস্যাটি সমাধানের সর্বোত্তম উপায় নয়, তারা কাজ করে।
আপডেট: @ @ alpha_989 লম্বা ফাইল এক্সটেনশনের ফলে সমস্যার কারণ হবে। এটি আসল রেজেক্স "" [[: আলফা:]] {3,6} "এর কারণে। আমি "[[: আলফা:]] {2,16}" রেজেক্স অন্তর্ভুক্ত করার জন্য উত্তর আপডেট করেছি। তবে এই কোডটি ব্যবহার করা যে কোনও ব্যক্তিকে সচেতন হওয়া উচিত যে এই সংখ্যাগুলি নূন্যতম এবং চূড়ান্ত আউটপুটটির জন্য এক্সটেনশনের অনুমতি কত মিনিটের সর্বাধিক। এই ব্যাপ্তির বাইরের যে কোনও কিছুই আউটপুটে একাধিক লাইনে বিভক্ত হবে।
দ্রষ্টব্য: মূল পোস্টটি পড়েছিল "- 3 থেকে 6 টি অক্ষরের মধ্যে ফাইল এক্সটেনশনের জন্য গ্রেপস (কেবলমাত্র তারা আপনার প্রয়োজনের সাথে ফিট না করে তবে সংখ্যাগুলি সামঞ্জস্য করুন) এটি ক্যাশে ফাইল এবং সিস্টেম ফাইলগুলি এড়াতে সহায়তা করে (সিস্টেম ফাইল বিটটি জেল সন্ধান করতে হবে)) "
আইডিয়া: এর মাধ্যমে নির্দিষ্ট দৈর্ঘ্যের উপরের ফাইল এক্সটেনশনগুলি খুঁজে পেতে ব্যবহার করা যেতে পারে:
find . -type f -name "*.*" | grep -o -E "\.[^\.]+$" | grep -o -E "[[:alpha:]]{4,}" | awk '{print tolower($0)}' | sort -u
যেখানে 4 ফাইলের এক্সটেনশনের দৈর্ঘ্য অন্তর্ভুক্ত করা যায় এবং তারপরে সেই দৈর্ঘ্যের বাইরে কোনও এক্সটেনশনও খুঁজে পান।
যেহেতু পার্ল ব্যবহার করে ইতিমধ্যে অন্য একটি সমাধান রয়েছে:
যদি আপনি পাইথন ইনস্টল করেন তবে আপনি এটি করতেও পারেন (শেল থেকে):
python -c "import os;e=set();[[e.add(os.path.splitext(f)[-1]) for f in fn]for _,_,fn in os.walk('/home')];print '\n'.join(e)"
এখন পর্যন্ত কোনও উত্তরই নিউলাইনগুলি সহ ফাইলের নামগুলি সঠিকভাবে মোকাবেলা করে নি (ক্রিস্টোফিডের বাদে, যা আমি টাইপ করার সাথে সাথে এসেছি)। নিম্নলিখিতটি শেল ওয়ান-লাইনার নয়, তবে কাজ করে এবং যুক্তিসঙ্গতভাবে দ্রুত।
import os, sys
def names(roots):
for root in roots:
for a, b, basenames in os.walk(root):
for basename in basenames:
yield basename
sufs = set(os.path.splitext(x)[1] for x in names(sys.argv[1:]))
for suf in sufs:
if suf:
print suf
আমি মনে করি না এটির এখনও উল্লেখ করা হয়েছিল:
find . -type f -exec sh -c 'echo "${0##*.}"' {} \; | sort | uniq -c
আমি এটি সহজ এবং দ্রুত খুঁজে পেয়েছি ...
# find . -type f -exec basename {} \; | awk -F"." '{print $NF}' > /tmp/outfile.txt
# cat /tmp/outfile.txt | sort | uniq -c| sort -n > tmp/outfile_sorted.txt
গৃহীত উত্তরটি আরইজিএক্স ব্যবহার করে এবং আপনি আরইজিএক্সের সাথে একটি উলাম কমান্ড তৈরি করতে পারবেন না, আপনাকে এটি একটি শেল স্ক্রিপ্টে রাখতে হবে, আমি অ্যামাজন লিনাক্স 2 ব্যবহার করছি এবং নিম্নলিখিতটি করলাম:
আমি এই ফাইলটি ব্যবহার করে গৃহীত উত্তর কোডটি রেখেছি:
sudo vim find.sh
এই কোড যুক্ত করুন:
find ./ -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u
টাইপ করে ফাইলটি সংরক্ষণ করুন: :wq!
sudo vim ~/.bash_profile
alias getext=". /path/to/your/find.sh"
:wq!
. ~/.bash_profile
.svn
) থেকে বাদ দিতে চান তবেfind . -type f -path '*/.svn*' -prune -o -print | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u
উত্সটি