特定のディレクトリに関するこの種の統計を表示したいと思います。
$ myscript.sh
.c 34265 files
.h 17866 files
.cbl 1804 files
.pco 389 files
[...]
これを行うためのツールはありますか?
私の試みは次のとおりです。
find . -name "*.*" | sed -e "s/.*\.//g" | sort -u
その後、各タイプの入力を持つことができますが、find . -name "*.pc" | wc -l
面倒なので、次のように書きました。
find . -name "*.*" | sed -e "s/.*\.//g" | sort -u |\
xargs find . -name "*.{}" | wc -l
残念ながら、私は次の内容のために何かを逃したようです:
find: paths must precede expression: as
(「as」が最初の拡張子です)
何が間違っているのか知っていますか?
私が望むことをするツールはすでにあります(ファイルの行数を計算するツールも機能します)。
ベストアンサー1
これは、ファイル名のリストをパイピングすることによって実行できますgawk
(練習/テストとして使用しますが、解析(tm)ls -1
はしません)。ls
gawk -F. '1 {exts[$NF]++} END {for (ext in exts){printf "%s: %s files\n", ext, exts[ext]}}'
これは、ピリオドの後ろのすべてが拡張子の一部ではないと仮定するため、ピリオドのないファイル名は完全な拡張子として扱われます。 (正しい拡張子を持つファイルをインポートに変更する1 {
だけで(NF>1) {
十分だと思います。