web-dev-qa-db-ja.com

ディレクトリ内のすべての拡張子とそれぞれのファイル数を取得する

ディレクトリのすべての拡張機能を取得する:簡単。特定の拡張子のファイル数を取得する:簡単です。

しかし、すべてのファイル拡張子とそれぞれのファイル数を取得することは私にほのめかしています。

例えば。

+ dir
 + abc.txt
 + def.txt
 + abc.pdf
 * def.pov

次のようなものが返されます:

.txt 2
.pdf 1
.pov 1

この演習の目的は、特定のディレクトリで人気のあるファイル拡張子を確認することです。

前もって感謝します

14
denormalizer
/var/cache$ Sudo find ./ -type f | grep -E ".*\.[a-zA-Z0-9]*$" | sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/' | sort | uniq -c | sort -n
      1 .6
      1 .cache
      1 .noconf
      1 .php
      1 .sl
      2 .bin
      2 .el
      2 .tdb
      4 .baseA
      4 .baseB
      4 .dat
      4 .DB
     27 .db
    221 .deb

ここに説明があります:

find ./ -type f

ディレクトリではなくファイルのみを検索

grep -E ".*\.[a-zA-Z0-9]*$"

拡張子付きのフィルターファイル

sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/'

パスとファイル名を削除し、拡張子のみを保存

sort | uniq -c | sort -n

sort、uniq、sort

47
bindbn

Linux(gnu grep)を使用しているので、Perl RE(PCRE)を使用する良い機会です-Pおよびgrepの-oオプション。 @bindbnの答えを優れた候補として取り上げます。

find . -type f | grep -Po '\.([\w\d])*$' | sort | uniq -c | sort -n
2
Jim