如何计算包含数字的子文件夹数量?

如何计算包含数字的子文件夹数量?

如何使用终端计算目录中包含数字的所有直接子文件夹?

所以不应该以递归方式计算。

答案1

您可以运行以下命令,该命令依赖于findwc,可以从您希望计算子目录的目录中运行(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) 限定符。

相关内容