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 sed
regex Anda .
The sed -r -n 's/.+(\..*)$/\1/p'
menggantikan nama file yang masuk dengan hanya ekstensi. Misalnya, .somefile.ext
menjadi .ext
. Catat inisial .+
dalam regex; ini menghasilkan setiap kecocokan yang membutuhkan setidaknya satu karakter sebelum ekstensi .
. Ini mencegah nama file seperti .gitignore
tidak 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 sort
ke 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