如何统计父目录下特定子目录中的文件?——以统计指定目录内image子目录的JPEG文件为例
统计指定子目录下的JPEG文件总数
针对你的需求——统计/Users/mydirectory下所有image子目录里的JPEG格式文件总数,我来梳理下可行的方案,包括优化你找到的命令,还有更高效的思路:
先优化你的初始命令逻辑
你之前用的命令能筛选出符合MIME类型的文件,但要统计数量其实不用多走一步print再wc -l,直接在awk里计数就行。不过更关键的是先缩小搜索范围,毕竟你只关心image子目录里的文件,没必要扫描label/这类无关目录,能大幅提升效率。
精准定位image子目录的两种方式
方式1:先找所有image目录再遍历文件
先让find定位到所有image子目录,再在这些目录里搜索文件,避免无效扫描:
find /Users/mydirectory -name "image" -type d -exec find {} -type f \;
方式2:用路径匹配直接过滤
直接用-path参数匹配包含image子目录的文件路径,写法更简洁:
find /Users/mydirectory -path "*/image/*" -type f
结合MIME类型检测与计数
把上面的范围限定和你用的file命令结合,再用awk直接统计数量(比你最后用wc -l的写法更直接):
find /Users/mydirectory -path "*/image/*" -type f -exec file --no-pad --mime-type {} + | awk '$NF == "image/jpeg" {count++} END {print count}'
这里的--no-pad是为了让file输出格式整齐,方便awk处理;用+代替;让file批量处理文件,比逐个处理快很多,尤其适合文件量大的场景。
当然,你最终找到的命令也能工作,但加上-path "*/image/*"的范围限定后,会少扫描很多无关文件,效率更高。
更高效的替代方案(如果扩展名规范)
如果你的JPEG文件都是.jpeg或.jpg扩展名,完全可以不用file命令,直接让find匹配扩展名,速度会快不少:
find /Users/mydirectory -path "*/image/*" -type f \( -name "*.jpeg" -o -name "*.jpg" \) | wc -l
这个方法的前提是文件名规范,扩展名和实际文件类型一致,适合大多数日常场景;如果遇到扩展名不对但实际是JPEG的文件,再用file检测MIME类型的方案就好。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

