web-dev-qa-db-ja.com

ディレクトリ内のフォルダ数(再帰的)

特定のCWD /現在のディレクトリにあるフォルダーの数(再帰的、隠しフォルダーを除く)を印刷したいと思います。この情報を確認するために、どのコマンドまたは一連のコマンドを使用できますか?

6
jml

これにより、現在の作業ディレクトリにある非表示ではないディレクトリの数がわかります。

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

編集:

これを再帰的にするには、-Rオプションls -l

ls -lR | grep "^d" | wc -l
10
Timothy Martin

GNU土地:

find . -mindepth 1 -maxdepth 1 -type d -printf . | wc -c

他の場所

find . -type d ! -name . -printf . -Prune | wc -c

バッシュで:

shopt -s dotglob
count=0
for dir in *; do
  test -d "$dir" || continue
  test . = "$dir" && continue
  test .. = "$dir" && continue
  ((count++))
done
echo $count
5
Hauke Laging

echo $(($(find -type d | wc -l) - 1))は一方向です(wc -lから1を引いて、現在のディレクトリを削除します)。オプションを find に微調整して、さまざまなものを見つけることができます。

echo $(($(find -type d -not -path '*/\.*' | wc -l) - 1))- hidden dirs を除外します==

コメントで述べたように、この式の中心は実際にはすべてのディレクトリを検索するfind -type dです。

これはすべてのサブフォルダーも検索することに注意してください--maxdepthフラグを使用して深さを制御できます。

2
transistor1

zsh内:

(){echo $#} *(N/)

再帰的に:

(){echo $#} **/*(N/)

非表示のディレクトリもカウントする場合は、Dグロブ修飾子を追加します。

同等のPOSIX:

ls -p | grep -c /

-Aオプションをlsに追加して非表示にできます)

再帰的に:

LC_ALL=C find .//. ! -name . \( -name '.*' -Prune -o -type d -print \) |
  grep -c //

または

LC_ALL=C ls -Rqn . | grep -c '^d'

非表示のものを含めるには:

LC_ALL=C find .//. ! -name . -type d | grep -c //

または:

LC_ALL=C ls -ARqn . | grep -c '^d'
1

treeコマンドを試しましたか?

tree -d /path/to/maindir| awk END{print}
1
αғsнιη

find . -type d -not -path '.' -printf 0 | wc -c ;

(。)ディレクトリではない現在のディレクトリ(find。)内のすべてのディレクトリ(-type d)を再帰的に検索し、見つかったディレクトリごとに0を出力します。次にwc -cは、前のコマンド出力からの文字数(0)をカウントします。

0
Chase T.