130

特定のディレクトリ内のフォルダ数を数える方法。次のコマンドを使用していますが、常に追加のコマンドが提供されます。

find /directory/ -maxdepth 1 -type d -print| wc -l

たとえば、3 つのフォルダーがある場合、このコマンドは 4 を提供します。5 つのフォルダーが含まれている場合、コマンドは 6 を提供します。なぜですか?

4

17 に答える 17

113

findディレクトリ自体も出力しています:

$ find .vim/ -maxdepth 1 -type d
.vim/
.vim/indent
.vim/colors
.vim/doc
.vim/after
.vim/autoload
.vim/compiler
.vim/plugin
.vim/syntax
.vim/ftplugin
.vim/bundle
.vim/ftdetect

代わりに、ディレクトリの子をテストし、それらにまったく降りないようにすることができます。

$ find .vim/* -maxdepth 0 -type d
.vim/after
.vim/autoload
.vim/bundle
.vim/colors
.vim/compiler
.vim/doc
.vim/ftdetect
.vim/ftplugin
.vim/indent
.vim/plugin
.vim/syntax

$ find .vim/* -maxdepth 0 -type d | wc -l
11
$ find .vim/ -maxdepth 1 -type d | wc -l
12

次のものも使用できますls

$ ls -l .vim | grep -c ^d
11


$ ls -l .vim
total 52
drwxrwxr-x  3 anossovp anossovp 4096 Aug 29  2012 after
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 autoload
drwxrwxr-x 13 anossovp anossovp 4096 Aug 29  2012 bundle
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 colors
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 compiler
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 doc
-rw-rw-r--  1 anossovp anossovp   48 Aug 29  2012 filetype.vim
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftdetect
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftplugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 indent
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 plugin
-rw-rw-r--  1 anossovp anossovp 2505 Aug 29  2012 README.rst
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 syntax

$ ls -l .vim | grep ^d
drwxrwxr-x  3 anossovp anossovp 4096 Aug 29  2012 after
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 autoload
drwxrwxr-x 13 anossovp anossovp 4096 Aug 29  2012 bundle
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 colors
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 compiler
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 doc
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftdetect
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftplugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 indent
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 plugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 syntax
于 2013-07-15T06:41:52.203 に答える
83

現在のディレクトリ内のディレクトリのみのカウントを取得します

echo */ | wc

あなたは次のように出てきます1 309 4594

2nd digitいいえを表します。ディレクトリの。

また

tree -L 1 | tail -1

于 2014-04-09T08:44:02.570 に答える
36
find . -mindepth 1 -maxdepth 1 -type d | wc -l

検索-mindepthの場合、ディレクトリ内の再帰的な総数を意味します

-maxdepthディレクトリ内の総再帰数を意味します

-type dディレクトリを意味します

そして forwc -l手段は入力の行を数えます

于 2015-12-20T21:43:26.207 に答える
23

フォルダーにディレクトリしかなく、ファイルがない場合は、次のようにします。

ls | wc -l
于 2019-01-20T09:54:26.240 に答える
13

ドライブに移動して簡単に実行するための最良の方法

ls -lR | grep ^d | wc -l

サブディレクトリを含むすべてのフォルダを合計で検索するには?

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

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

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

乾杯!

于 2014-04-30T14:02:33.020 に答える
13

実行stat -c %h folderして、結果から 2 を引きます。これは、ここでの他のほとんどのソリューションで必要とされる 2 つ (または 3 つ) とは対照的に、単一のサブプロセスのみを使用します (通常はfindplus wc)。

sh/bash の使用:

cnt=$((`stat -c %h folder` - 2))
echo $cnt # 'echo' は sh/bash ビルトインであり、追加のプロセスではありません

csh/tcsh の使用:

@ cnt = `stat -c %h folder` - 2
echo $cnt # 'echo' は csh/tcsh 組み込みであり、追加のプロセスではありません


説明:フォルダーstat -c %h folderへのハードリンクの数を出力し、フォルダーの下の各サブフォルダーには、フォルダーへのハードリンクである ../ エントリが含まれます。カウントにはさらに 2 つのハードリンクがあるため、2 を引く必要があります。

  1. folder自身の自己参照 ./ エントリ、および
  2. フォルダの親のフォルダへのリンク
于 2016-07-26T00:41:46.680 に答える
8

以下のコマンドを使用して見つけることができるディレクトリの数

ls -l | grep "^d" | wc -l

于 2019-12-02T09:51:35.990 に答える
3

使用zsh:

a=(*(/N)); echo ${#a}

Nnullglob であり、/ディレクトリと一致させ、#カウントします。ディレクトリ名のスペースにきちんと対処し、ディレクトリ0がない場合は戻ります。

于 2016-11-14T22:18:40.923 に答える