如何使用终端计算目录中包含数字的所有直接子文件夹?
所以不应该以递归方式计算。
答案1
您可以运行以下命令,该命令依赖于find
和wc
,可以从您希望计算子目录的目录中运行(find .
),也可以通过替换find .
为您想要计算子目录的目录的路径(find /path/to/directory
):
find . -maxdepth 1 -type d -name "*[0-9]*" -printf "." | wc -c
此命令:
- 仅查找目录 (
-type d
) - 仅搜索一层深度(
-maxdepth 1
) - 名称中包含至少一个数字(
-name "*[0-9]*"
) .
然后对找到的任何文件打印(-printf "."
)- 最后将
|
结果通过管道 () 传输给计算机来wc -c
计算数量.
(实际上是字节数),该数量对应于找到的目录总数。
参考:
答案2
计数非隐藏当前目录中的子文件夹名称至少包含一个数字,您可以使用以下之一
在bash中:
shopt -s nullglob
dirs=( *[[:digit:]]*/ )
printf '%d\n' "${#dirs[@]}"
如果省略nullglob
,则在没有匹配子目录的情况下,它将返回计数 1。在 POSIX sh(没有 nullglob 等效项)中,我们需要明确检查我们不只是计算不匹配的模式:
set -- *[[:digit:]]*/
[ -d "$1" ] && printf '%d\n' "$#" || printf '0\n'
在上述任一情况下,如果要确保仅匹配拉丁十进制数字,请更改[[:digit:]]
为。要在 bash 的计数中包含隐藏(点)文件夹,您可以设置选项 - 在 POSIX sh 中,我认为您需要明确添加。[0123456789]
dotglob
.*[[:digit:]]*/
在 zsh 中(这个实际上匹配一个数字范围而不是单个数字):
() { print -rl $# } *<->*(N/)
要在 zsh 中包含隐藏文件夹,请添加D
(dotglob) 限定符。