我必须计算给定目录中的目录总数(请注意,这些是子目录)。
我知道如何计算文件数,但在计算脚本的目录时遇到问题。
答案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