计算目录列表中的目录数量

计算目录列表中的目录数量

我有大量目录,我想用 bash 命令计算每个目录中的目录数量。我很难ls实现wc我想要的目标。

例如,如果我有以下文件夹结构(其中叶文件夹可能包含更多子文件夹):

.
├── folder1
│   └── subfoldera
├── folder2
│   ├── subfoldera
│   └── subfolderb
├── folder3
│   ├── subfoldera
│   ├── subfolderb
│   └── subfolderc
└── folder4
    ├── subfoldera
    ├── subfolderb
    └── subfolderc

然后我希望有计数

1
2
3
3

等等。

答案1

使用 bash 和数组:

dirs=(*/)                      # get all directories with globbing
                               # in current directory

for d in "${dirs[@]}"; do
  sub=("$d"*/)                 # get all subdirs in $d
  echo "${#sub[@]}"            # print number of array elements/subdirs
done

输出:

1
2
3
3

作为一行:

dirs=(*/); for d in "${dirs[@]}"; do sub=("$d"*/); echo "${#sub[@]}"; done

答案2

如果目录的名称不包含 '\n' 这应该可以工作:

parallel 'ls -d {}/*/ | wc -l' ::: */

如果您想在输出中包含目录:

parallel --tag 'ls -d {}/*/ | wc -l' ::: */

相关内容