如何基于现有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
相关产品推荐
相关产品推荐

