如何快速获取各子文件夹的非递归子文件夹数量并格式化输出
实现子文件夹名称与非递归子文件夹数的同行输出
单行命令直接实现
如果只是需要快速执行的单行命令,有两种可靠的写法:
- 用
find处理(推荐,支持含空格、特殊字符的文件夹名):
for dir in */; do printf "%-20s %d\n" "$dir" "$(find "$dir" -maxdepth 1 -type d | wc -l | awk '{print $1-1}')"; done
- 说明:
find "$dir" -maxdepth 1 -type d会列出目标文件夹下所有目录(包括自身),统计后减1得到真实的非递归子文件夹数量;printf的%-20s参数让文件夹名左对齐占20个字符,保证输出排版整齐。
- 用
ls简化写法(仅当文件夹名不含特殊字符时使用):
for dir in */; do echo -n "$dir "; ls -d "$dir"*/ 2>/dev/null | wc -l; done
- 说明:
ls -d "$dir"*/只列出目标文件夹下的子文件夹,2>/dev/null用来忽略没有子文件夹时的错误提示;echo -n确保文件夹名和统计数在同一行输出。
更健壮的bash脚本(适合复杂场景)
如果需要处理包含换行、特殊字符的极端情况,或者要复用逻辑,可以写一个简单的脚本:
#!/bin/bash for dir in */; do # 跳过非目录项(严谨性处理) [[ -d "$dir" ]] || continue # 直接统计排除自身的子文件夹数量 sub_count=$(find "$dir" -maxdepth 1 -type d ! -path "$dir" | wc -l) # 用制表符分隔输出,也可替换为空格调整格式 printf "%s\t%d\n" "$dir" "$sub_count" done
- 说明:
! -path "$dir"直接排除了文件夹自身,无需额外减1;[[ -d "$dir" ]]确保只处理目录,避免意外情况。
内容的提问来源于stack exchange,提问作者Tlaloc-ES
相关产品推荐
相关产品推荐

