计算忽略父目录的子目录数

Count number of subdirectories ignoring parent directories

我想计算深度 2 的子目录数量,但在 bash 脚本中忽略深度 1 的父目录。

示例:

root_dir ---|--ignore_dir ---|--count_dir
            |                |--count_dir ---|--ignore_dir
            |                                |--ignore_dir
            |--ignore_dir ---|--count_dir
                             |--count_dir
                             |--count_dir

有什么想法吗?

您可以尝试这样的操作:

find /path/to/root_dir -maxdepth 2 -mindepth 2 -type d | wc -l

这里我们明确限制find的深度为2(不多也不少)并列出所有目录。 wc -l 计算 find 命令输出的行数。

注:

如果您的文件夹名称包含换行符、特定字符或不寻常的编码,使用 wc -l 将产生不正确的结果。

this question 中汲取灵感,您可以改为为找到的每个文件夹打印一个字符,并计算得到的字符数。

您可以使用以下代码段:

find /path/to/root_dir -maxdepth 2 -mindepth 2 -type d -printf '.' | wc -c     

另一种方法是通配

ls /path/to/root_dir/*/*/ -d | wc -l

我发现这种类型的解决方案更容易记住,但它不像 find-one

那样容易 'scalable'(例如,许多深度级别)