このワンライナーはかなり堅牢な方法のようです:
find . -type f -printf '%f\n' | sed -r -n 's/.+(\..*)$/\1/p' | sort | uniq -c
find . -type f -printf '%f\n'
プリントなしのディレクトリとツリー内のすべての通常のファイルのベース名。これにより.
、sed
正規表現にが含まれているディレクトリを心配する必要がなくなります。
sed -r -n 's/.+(\..*)$/\1/p'
唯一その延長で入ってくるファイル名に置き換えられます。たとえば、に.somefile.ext
なり.ext
ます。.+
正規表現のイニシャルに注意してください。これにより、拡張子の前に少なくとも1文字必要な一致が生じ.
ます。これにより.gitignore
、名前がまったくないファイル名や拡張子「.gitignore」が必要なファイル名として扱われるのを防ぐことができます。ない場合は、交換してください.+
と.*
。
行の残りは、受け入れられた回答からのものです。
編集:パレートチャート形式で適切にソートされたヒストグラムが必要な場合はsort
、最後にもう1つ追加します。
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