Satu garis ini tampaknya merupakan metode yang cukup kuat:
find . -type f -printf '%f\n' | sed -r -n 's/.+(\..*)$/\1/p' | sort | uniq -c
The find . -type f -printf '%f\n'cetakan yang basename setiap file biasa di pohon, tanpa direktori. Itu menghilangkan harus khawatir tentang direktori yang mungkin ada .di dalamnya di sedregex Anda .
The sed -r -n 's/.+(\..*)$/\1/p'menggantikan nama file yang masuk dengan hanya ekstensi. Misalnya, .somefile.extmenjadi .ext. Catat inisial .+dalam regex; ini menghasilkan setiap kecocokan yang membutuhkan setidaknya satu karakter sebelum ekstensi .. Ini mencegah nama file seperti .gitignoretidak diperlakukan sama sekali tanpa nama dan ekstensi '.gitignore', yang mungkin Anda inginkan. Jika tidak, ganti .+dengan a .*.
Sisa kalimat berasal dari jawaban yang diterima.
Sunting : Jika Anda ingin histogram yang diurutkan dengan baik dalam format bagan Pareto , tambahkan saja yang lain sortke akhir:
find . -type f -printf '%f\n' | sed -r -n 's/.+(\..*)$/\1/p' | sort | uniq -c | sort -bn
Contoh output dari pohon sumber Linux yang dibangun:
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