Linuxを使用してドライブ内のフォルダーの数をカウントするにはどうすればよいですか?


24

500個を超えるフォルダーが存在しないように外部HDDを整理する必要があります。Ubuntuの[プロパティ]ペインには、フォルダー数ではなくファイル数のみが表示されます。

サブディレクトリの数を教えてくれるシンプルなコマンドラインはありますか?

再帰的にカウントする必要があり、ドライブはにマウントされた外付けHDD /media/MUSIC/です。これは、最初の500個のフォルダーのみを読み取るとドキュメントに記載されているカーステレオシステム用です。

回答:


20

ドライブに移動して実行するだけです

ls -lR | grep ^d | wc -l

これは、私が3年前に受け入れた答えよりも正しい数を提供しているようです。私がいたディレクトリをカウントしましたが、これはしませんでした。
ディーンラザー

異なる数字も表示されますが、それほど違いはありません。
SPRBRN 14

個人的に私は好むgrep -cの上にwc -l。たぶんそれは私だけです。
Maxim_united

1
ディレクトリエントリにシーケンスが含まれている場合\nd\nNL文字は)、上記はオーバーカウントされます。
トビースパイト

1
トビーは正しい、ls出力はパイプされることになっていない。さらに、ツリー全体を出力してからgrepを実行する必要があるため、これは非常に遅くなります
-phuclv

37

サブディレクトリを含む、すべてのフォルダーを合計で検索しますか?

find /mount/point -type d | wc -l

...またはルートディレクトリ内のすべてのフォルダを検索します(サブディレクトリは含みません)?

find /mount/point -maxdepth 1 -type d | wc -l

その最初のものはまさに私が求めているものです。ありがとう!
ディーンラザー

@Dean:ええ、私も以前に自分の音楽コレクションのディレクトリを数えるのに使っていました。:)ブラギンの権利については、MP3をカウントします。/ mount / point -type f | grep -i mp3 | wc -l
クワックキホーテ

1
@Dean:はい、find構文はわからないのですが、通常はgrep -vを使用します:find / mount / pt -type f | grep -vi mp3 | grep -vi wav | wc -l ...(および<i> </ i>はコメントでは機能せず、*foo*イタリック体にするために使用:foo
クワックキホーテ

2
@Dean:私はあなただけで使用したいと思いますfind /path -not -iname '*.mp3' | wc -lフィルタMP3ファイルに、または両方のMP3やWAVファイルの使用を得るためにfind /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l
いんちきキホーテ

1
フォルダも無視するために-type fを追加する必要がありましたが、おめでとうございます!まったくわからないm4aファイルを見つけました。ありがとう!
ディーンラザー

4

改行は、ディレクトリ名の有効な文字です。find見つかったディレクトリごとに空の行を印刷してから、wcそれらの行をカウントすることをお勧めします。

find /mount/point -type d -printf '\n' | wc -l

3

以下を試してください[以下を参照]:

ls -1 -p | grep "/" | wc -l

これにより、サブディレクトリであるアイテムの末尾にスラッシュが付いた現在のディレクトリの1列のリストが出力され、スラッシュのある行がカウントされます。

編集:あなたはおそらくもう少し明示的であるので、おそらくquack quixoteの答えに行くべきですが、私は(quackの提案を考慮に入れた後)修正しました。

ls -Rp | grep "/$" | wc -l

-Rを追加して再帰的に実行する必要があり(言及に失敗して申し訳ありません)、lsへのパスを指定する必要がありますが、ええ、これは機能します。grep "/" | wc -lありがとう!
ディーンラザー

これとクイックキホーテの提案の両方を試した後、私は2つの異なる結果を得ました...私はもう1つを信じる傾向があります。とにかくありがとう!
ディーンラザー

1
あなたは必要としない-1ので、LSはパイプを検出し、列をフォーマットしません。また、を使用して再帰的なリストを取得することもできますが-R、その後、"/$"末尾のスラッシュにのみ一致するようにgrepを実行する必要があります(またはカウントがオフになります)。最終バージョン:ls -Rp | grep "/$" | wc -l
クワックキホーテ

1
私が投稿した検索バージョンはそのカウントに.(つまり/mount/point)カウントされますが、上記のコメントのlsバージョンはカウントされません。それらのカウントは1だけ異なり/mount/point/*findコマンドでそれを修正するために使用できます(隠れたドットディレクトリがないと仮定)。
いんちきのキホーテ

2つの異なる結果が得られた理由はわかりませんが、@ quackのメソッドには「隠された」ディレクトリ(「。」で始まるディレクトリ)が含まれます。
スタンマウス

1

私は書かれているffcntを回転ディスクとファイルシステムそのサポート範囲のマッピング:特定の状況下では、再帰的なファイルのカウントをスピードアップします。

それはlsfindベースのアプローチよりも一桁速い可能性があります


1

多数のディレクトリがある場合、次のようなツールtreeは終了またはハングアップするまでに時間がかかる場合があるため、より効率的なものを使用することができます。

私が考えることができるディレクトリを数える最も効率的な方法は次のようになります。完全なパスとファイル名ではなく、見つかったフォルダごとにfind1つだけを印刷し、文字数だけ繰り返す必要があるからです。.wc

find /mount/point -type d -printf '.' |wc -c

/mount/point計算から自身を除外し、サブディレクトリのみをカウントするには:

find /mount/point -mindepth 1 -type d -printf '.' |wc -c

1

du --inodes便利だとわかったが、どのバージョンがdu必要なのかわからない。Ubuntu 17.10では、以下が機能します。

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

と組み合わせて| sort -nr、含まれるiノードの数で降順​​でソートします。


0

ツリーを使用してディレクトリ数を取得するのが好きです

tree -d -R -fi --noreport | wc -l

または、findを使用して、フォルダの大部分が

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn

または次のようなもの:ツリー| grep -e '^。* directories'
mindcrime

-2

現在のディレクトリ内のフォルダとディレクトリの数を見つけるには

ターミナルで次のコマンドを入力します

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