Shell脚本统计含.tab文件的目录及子目录下的.xlsx文件数量
Shell脚本实现指定目录xlsx文件统计
核心逻辑
只统计同目录下存在.tab文件的文件夹内的.xlsx文件,跳过无.tab文件目录下的xlsx文件,解决原生find命令全量统计不符合要求的问题。
可直接执行的命令
Linux环境(GNU find,绝大多数发行版默认)
直接运行即可输出符合要求的xlsx文件总数:
find . -type f -name '*.tab' -printf '%h\n' | sort -u | while read -r dir; do find "$dir" -maxdepth 1 -type f -name '*.xlsx'; done | wc -l
跨平台兼容版本(支持macOS/BSD find等环境)
如果运行上面的命令报printf: unknown option类错误,用这个版本:
find . -type f -name '*.tab' -exec dirname {} \; | sort -u | while read -r dir; do find "$dir" -maxdepth 1 -type f -name '*.xlsx'; done | wc -l
命令逻辑说明
- 第一步通过find定位所有.tab文件,提取每个.tab文件所在的目录路径
- 对目录路径去重,避免同目录下存在多个.tab文件导致重复扫描
- 逐个扫描有效目录下的.xlsx文件,
-maxdepth 1参数表示只统计当前子目录下的xlsx,不递归更深层目录;如果需要递归统计有效目录下所有层级的xlsx,直接删除该参数即可 - 最后通过
wc -l统计符合要求的xlsx总数量 - 如果需要查看具体哪些xlsx文件被统计,删掉命令末尾的
| wc -l即可输出所有符合条件的文件路径
效果验证
针对你给出的示例目录结构:
RootDir/ ├── SubDir1/ │ ├── test.xlsx │ └── test.tab └── SubDir2/ └── test.xlsx
运行命令后返回统计结果为1,仅统计SubDir1下的test.xlsx,SubDir2因无.tab文件,其下的xlsx不会被计入,完全匹配需求。
内容的提问来源于stack exchange,提问作者Manoj Kumar
相关产品推荐
相关产品推荐

