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


14

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

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

例えば。

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

次のようなものを返す必要があります。

.txt 2
.pdf 1
.pov 1

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

前もって感謝します

回答:


47
/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

並べ替え、uniqおよび並べ替え


あなたの正規表現は拡張機能で複数の文字を許可にし、排除することができるgrep、これを行うことによって:sed -ne '/\.[^./]*$/s/.*\(\.[^.]*\)$/\1/p'
一時停止追って通知があるまで。

Dennis、grepとsedをsedに置き換えると、次のエラーが返されます:sed:-e expression#1、char 30:invalid reference \ 1 on `s 'command's RHS
denormalizer

1

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

find . -type f | grep -Po '\.([\w\d])*$' | sort | uniq -c | sort -n
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.