You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux多文件夹文件统计Shell脚本运行过慢优化求助

脚本问题根因与优化方案

原脚本核心问题

  • 存在完全冗余的嵌套执行逻辑:先全量遍历文件夹拿到所有文件列表,又遍历每个文件时重复执行全量find统计,若单文件夹下有10万个文件,就会重复执行10万次find命令,这是耗时极长的核心原因
  • 重复调用date命令:日期值不需要在循环内反复计算,甚至不需要计算两次,提前计算一次即可
  • 过滤逻辑低效:先全量find返回所有文件,再用grep匹配日期,远不如直接在find中加过滤条件效率高
  • 未做路径兼容性处理:未加引号包裹路径变量,遇到带空格的路径会执行出错

优化后脚本

#!/bin/bash
# 提前全局计算统计日期,仅执行1次
dat=$(date -d '-1 day' '+%g%m%d')
input_path="/bgw_vol01/script/input_path_CDR.txt"
output_file="output_${dat}.txt"

# 提前清空输出文件,避免历史追加残留
> "$output_file"

# 按行读取路径,兼容带空格的路径
while IFS= read -r folder; do
    # 单次find直接过滤匹配日期的文件,统计数量
    count=$(find "$folder" -type f -name "*${dat}*" | wc -l)
    echo "${HOSTNAME}|${folder}|${dat}|File count: ${count}" >> "$output_file"
done < "$input_path"

优化效果说明

  • 每个文件夹仅执行1次find命令,无冗余重复执行,整体耗时和手动单文件夹执行命令的总耗时一致,10个文件夹统计总耗时不会超过2分钟
  • 所有变量仅计算1次,无多余进程开销
  • 路径处理更规范,避免特殊路径执行报错

内容的提问来源于stack exchange,提问作者ninhdt4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:24:03