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

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脚本实现统计,步骤如下:

  1. 安装universal-ctags,系统包管理器中包名一般为ctags或universal-ctags
  2. 执行以下命令生成函数列表,再遍历计算每个函数的行数:
# 生成所有函数的名称、所在文件、起始行号列表
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:15:04