ซับเดี่ยวนี้ดูเหมือนว่าจะเป็นวิธีที่แข็งแกร่งพอสมควร:
find . -type f -printf '%f\n' | sed -r -n 's/.+(\..*)$/\1/p' | sort | uniq -c
find . -type f -printf '%f\n'พิมพ์ basename ของไฟล์ปกติทุกคนในต้นไม้กับไดเรกทอรีไม่มี ที่ไม่ต้องกังวลเกี่ยวกับไดเรกทอรีที่อาจมี.อยู่ในพวกเขาในsedregex ของคุณ
sed -r -n 's/.+(\..*)$/\1/p'แทนที่ชื่อไฟล์ที่เข้ามามีเพียงการขยาย เช่นจะกลายเป็น.somefile.ext .extหมายเหตุเริ่มต้น.+ใน regex; ผลนี้ในการแข่งขันใด ๆ .ต้องอย่างน้อยหนึ่งตัวก่อนของส่วนขยาย สิ่งนี้จะป้องกันไม่ให้ชื่อไฟล์เหมือน.gitignoreถูกมองว่าไม่มีชื่อเลยและนามสกุล '.gitignore' ซึ่งอาจเป็นสิ่งที่คุณต้องการ ถ้าไม่ได้แทนที่ด้วย.+.*
ส่วนที่เหลือของสายมาจากคำตอบที่ได้รับการยอมรับ
แก้ไข : หากคุณต้องการฮิสโตแกรมที่เรียงลำดับอย่างดีในรูปแบบแผนภูมิ Paretoเพียงเพิ่มอีกหนึ่งsortส่วนท้าย:
find . -type f -printf '%f\n' | sed -r -n 's/.+(\..*)$/\1/p' | sort | uniq -c | sort -bn
เอาต์พุตตัวอย่างจากแผนผังซอร์ส Linux ที่สร้างขึ้น:
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