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

如何基于现有Shell脚本实现递归查找指定扩展名文件并统计总行数?

解决方案:给现有文件统计脚本添加总行数统计功能

我来帮你搞定这个需求!你的现有脚本已经能递归查找指定扩展名的文件,并把每个文件的「文件名:行数:单词数」写入temp.txt,要添加总行数统计其实很简单,咱们可以在遍历过程中累加行数,最后把统计结果追加到文件里。

先修正原脚本的小问题

原脚本里for i in $(find . -name '*.$1'|awk -F/ '{print $NF}')这种写法存在隐患:如果文件名包含空格、特殊字符,会被错误拆分。咱们换成更安全的find + while read写法来处理所有文件名场景。

修改后的完整脚本

#!/bin/bash
# 初始化总行数统计变量
total_lines=0

# 清空temp.txt(可选,避免多次运行重复追加内容)
> temp.txt

# 递归查找指定扩展名的文件,兼容含空格/特殊字符的文件名
find . -name "*.$1" -print0 | while IFS= read -r -d '' file; do
    # 提取纯文件名(去掉路径前缀)
    filename=$(basename "$file")
    # 计算当前文件的行数和单词数
    line_count=$(wc -l < "$file")
    word_count=$(wc -w < "$file")
    # 写入temp.txt
    echo "$filename:$line_count:$word_count" >> temp.txt
    # 累加总行数
    total_lines=$((total_lines + line_count))
done

# 把总行数统计追加到temp.txt末尾,做清晰区分
echo "=== 统计汇总 ===" >> temp.txt
echo "总行数: $total_lines" >> temp.txt

# 可选:对temp.txt内容排序(保留你原脚本的sort逻辑)
sort temp.txt -o temp.txt

关键改进点说明

  • 安全处理文件名:用find ... -print0和while IFS= read -r -d ''组合,完美兼容带空格、特殊字符的文件名,彻底避免原脚本的拆分错误
  • 总行数累加逻辑:初始化total_lines=0,每次循环把当前文件的行数加到变量里,最后统一输出
  • 可选清空文件:添加> temp.txt避免多次运行脚本时内容重复堆积
  • 清晰的汇总标识:用分隔线和明确的文字标注汇总行,让统计结果更易读

运行示例

假设你要查找所有.txt文件,运行脚本:

./your_script.sh txt

最终temp.txt的内容会类似这样:

note.txt:42:310
report.txt:78:625
=== 统计汇总 ===
总行数: 120

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:42:38