如何统计UNIX目录下的子目录数量?

如何统计UNIX目录下的子目录数量?

我必须计算给定目录中的目录总数(请注意,这些是子目录)。

我知道如何计算文件数,但在计算脚本的目录时遇到问题。

答案1

@rahul 评论的稍微有力的变体:

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

将为当前目录中除当前目录之外的每个目录打印“1”( -mindepth 1),然后我们计算 1。这将处理包含换行符的目录名称。

答案2

如果将 a 放在/通配符模式的末尾,则该模式将仅匹配目录和目录的符号链接。因此,以下代码片段对当前目录中的目录和符号链接进行计数。

set -- */ .*/
if ! [ -e "$1" ]; then shift; fi # handle the case when */ matches nothing
echo $(($# - 2)) # -2 for . and ..

在 bash 中,您可以将其简化为

shopt -s dotglob nullglob
dirs=(*/)
echo ${#dirs[@]}

如果您不想包含目录,请使用find.如果没有一个目录的名称包含换行符,您可以计算行数:

find . -name . -o -type d -print -prune | wc -l

为了完全稳健,请改为计算斜线。

find . -name . -o -type d -print -prune | tr -dc / | wc -c

答案3

计算(仅)当前目录中的目录:

find . -mindepth 1 -maxdepth 1 -type d | wc -l

计算当前目录及其包含的所有子目录中的目录:

find . -mindepth 1 -type d | wc -l

相关内容