Linux环境下统计代码仓库所有函数及对应行数的方法求助
代码仓库函数级行数统计实现方案
推荐方案:使用成熟工具scc
这是目前最省心的方案,支持几乎所有主流编程语言,自动识别函数语法,统计结果准确率高,还能自动适配git仓库的文件过滤规则:
- 安装:直接用系统包管理器安装即可,Debian/Ubuntu执行
apt install scc,RHEL/CentOS/Fedora执行dnf install scc - 统计命令:在仓库根目录执行
scc --function $(git ls-files),输出结果会包含每个函数的名称、所在文件路径、有效代码行数,自动排除空行、注释行,和你之前用git ls-files | xargs wc -l的统计范围完全对齐。
自定义脚本方案(适配特定语言场景)
如果你的项目是单一语言,不想安装额外工具,可以用ctags+shell脚本实现统计,步骤如下:
- 安装universal-ctags,系统包管理器中包名一般为
ctags或universal-ctags - 执行以下命令生成函数列表,再遍历计算每个函数的行数:
# 生成所有函数的名称、所在文件、起始行号列表 ctags -R --sort=yes --fields=+K --fields=+n . | awk '$2 == "function" {print $1, $4, $5}' | sort -k2,2 -k3n > func_list.txt # 遍历计算每个函数的行数 while read func file line; do # 取当前文件下一个函数的起始行 next_line=$(awk -v f="$file" -v l="$line" '$2 == f && $3 > l {print $3; exit}' func_list.txt) if [ -z "$next_line" ]; then # 为文件最后一个函数时,取文件总行数计算 total_lines=$(wc -l < "$file") func_lines=$((total_lines - line + 1)) else func_lines=$((next_line - line)) fi echo "$file: $func 行数:$func_lines" done < func_list.txt # 清理临时文件 rm func_list.txt
如果你的语言不是用function关键字定义函数,修改第一条awk命令里的$2 == "function"为对应标签类型即可,比如C语言改成$2 == "f"。
注意事项
- 自定义脚本仅适合单一语法规则的项目,多语言项目优先使用scc等成熟工具,避免语法识别错误
- 如需排除特定目录或文件,可以在
git ls-files后面加过滤参数,也可以在ctags命令中加--exclude参数实现。
内容的提问来源于stack exchange,提问作者p4avinash
相关产品推荐
相关产品推荐

