目录中的文件夹数量(递归)

目录中的文件夹数量(递归)

我想打印给定 CWD / 当前目录中的文件夹数量(递归,不包括隐藏文件夹)。我可以使用什么命令或一系列命令来确定此信息?

答案1

这将找到当前工作目录中非隐藏目录的数量:

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

编辑:

为了使其递归,请使用-R以下选项ls -l

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

答案2

在 GNU 土地上:

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

别处

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

在bash中:

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

答案3

echo $(($(find -type d | wc -l) - 1))是一种方法(从 wc -l 中减去 1 以删除当前目录)。您可以调整选项寻找去寻找不同的东西。

echo $(($(find -type d -not -path '*/\.*' | wc -l) - 1))- 排除隐藏目录

正如我在评论中提到的,这个表达式的核心实际上是find -type d,它查找所有目录。

请注意,这也会找到所有子文件夹 - 您可以使用-maxdepth标志控制深度。

答案4

zsh

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

递归地:

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

D如果您还想计算隐藏目录的数量,请添加glob 限定符。

POSIX 等效项:

ls -p | grep -c /

(添加隐藏选项-Als

递归地:

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'

相关内容