フォルダーおよびサブフォルダー内のファイルの数を見つけますか?


143

フォルダーとそのすべてのサブフォルダーの下にあるファイルの総数の合計を見つけたい。

回答:


224

のようなものかもしれません

find . -type f | wc -l

トリックを行います。親フォルダーからコマンドを試してください。


3
名前に改行が含まれるファイルでは、ソリューションは失敗します。
ユーザー不明

2
@ユーザー不明:find . -type f -ls | wc -l
手配

1
さらに高速:find . -type f -print0 | tr -d -c '\0' | wc -c
手配

13
@arrange:さらに高速:find . -type f -printf . | wc -c-- exec echoの代わりに、ソリューションにprintを採用します。
ユーザー不明

1
私の場合、このコマンドは魅力のように機能し、黒魔術のように見えます
-pcko1

27

treeコマンドを使用します。treeパッケージのインストールが必要になる場合があります。

指定されたフォルダーの下にあるすべてのファイルとフォルダーをリストし、最後に要約をリストします。


14

現在のディレクトリのルートにあるファイル(拡張子のないファイルも含む)をカウントするには、次を使用します。

ls -l | grep ^- | wc -l

現在のディレクトリのルートからファイル(拡張子のないファイルも含む)を再帰的にカウントするには、次を使用します。

ls -lR | grep ^- | wc -l

1
それらは隠しファイルをカウントしません。
ユーザー不明

本当です。私はあなたの答えを解決策として受け入れ、使用したいと思っています。
user38537

13

最速かつ最も簡単な方法は、を使用することtreeです。その速度は出力ターミナルによって制限されるため、結果をtail -1にパイプすると、すぐに結果が得られます。-Lオプションを使用して、結果が好きなディレクトリレベルを制御することもできます。カラー化された出力には、を使用します-C。例えば:

$ tree share/some/directory/ | tail -1
558 directories, 853 files

$ tree -L 2 share/some/directory/ | tail -1
120 directories, 3 files

まだそこにない場合は、ここで入手できます


9
find -type f -printf . | wc -c

99個の改行を含むファイル名は100個のファイルとしてカウントされるため、findの出力行をカウントしないでください。


4
改行を含むファイル名は、非常にまれなエッジケースです。
不機嫌なヤギ

8
@DisgruntledGoat:したがって、エラーを見つけるのは非常に困難です。
ユーザー不明

私は、特に何年も後に、良いエッジケースが好きです。
user38537


1

findはtreeよりも速いように思えるので、現在の作業ディレクトリの各ディレクトリ内のファイルをカウントするために以下を使用しました(CWDのファイルは無視します)。

ls -d */ | while read dir_line do echo -n "$dir_line :" find "$dir_line" -type f | wc -l done


の出力の解析ls非常に悪い考えです。
souravc

すばらしいコード、出力行をファイルのカウントを増やしたり減らしたりするように配置するにはどうすればいいですか
nightcrawler

0

使用できます find . | wc -l

find .現在のフォルダーから始まるすべてのファイルとフォルダー、およびそれらの内容がリストされます。
wc -l検索の結果をカウントします


このソリューションはフォルダーもカウントします。マークを付けたのは、カウントしたくないという私の機会に一致したためです:)
トップレス

名前に改行が含まれるファイルでは、ソリューションは失敗します。
ユーザー不明

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.