我有大量目录,我想用 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' ::: */