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

Linux 计数忽略父目录的子目录数,linux,bash,directory,directory-structure,subdirectory,Linux,Bash,Directory,Directory Structure,Subdirectory,我想计算深度2中的子目录数,但忽略bash脚本中深度1的父目录 示例: root_dir ---|--ignore_dir ---|--count_dir | |--count_dir ---|--ignore_dir | |--ignore_dir |--ignore_dir ---|--count_dir

我想计算深度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
命令输出的行数

注意:

root_dir ---|--ignore_dir ---|--count_dir
            |                |--count_dir ---|--ignore_dir
            |                                |--ignore_dir
            |--ignore_dir ---|--count_dir
                             |--count_dir
                             |--count_dir
如果文件夹名称包含换行符、特定字符或异常编码,则使用
wc-l
将产生不正确的结果

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

您可以使用以下代码段:

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

另一种方法是通过全球化

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

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

那么容易“可伸缩”(例如,可扩展到多个死亡级别)。虽然这回答了这个问题,但当名称中有换行符时,应该小心。()@kvantour我编辑了我的答案,以解决“输出中的特殊字符”的边缘情况。虽然这回答了问题,但当名称中有换行符时,应该小心。()