Bu tek astar oldukça sağlam bir yöntem gibi görünüyor:
find . -type f -printf '%f\n' | sed -r -n 's/.+(\..*)$/\1/p' | sort | uniq -c
find . -type f -printf '%f\n'
Baskılar hiçbir dizinleri ile ağaçtaki her düzenli dosyanın basename. Yani olabilecek dizinleri hakkında endişe ortadan kaldırır .
sizin de onları 's sed
regex.
sed -r -n 's/.+(\..*)$/\1/p'
Sadece uzantılı gelen dosya adı değiştirir. Örneğin, .somefile.ext
olur .ext
. .+
Regex'te ilk olanı not edin ; bu, uzantıdan önce en az bir karakter gerektiren herhangi bir eşleşmeyle sonuçlanır .
. Bu, dosya adlarının .gitignore
adının olmadığı gibi davranılmasını ve '.gitignore' uzantısını engeller; bu da muhtemelen istediğiniz şeydir. Değilse, yerini .+
bir ile .*
.
Hattın geri kalanı kabul edilen cevaptan geliyor.
Düzenleme : Pareto grafik biçiminde güzelce sıralanmış bir histogram istiyorsanız sort
, sonuna bir tane daha ekleyin :
find . -type f -printf '%f\n' | sed -r -n 's/.+(\..*)$/\1/p' | sort | uniq -c | sort -bn
Yerleşik bir Linux kaynak ağacından örnek çıktı:
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