星河避难所

返回

我写了个脚本,统计了我自己写了多少行代码(纯图一乐)Blur image

为什么要做这件事?#

老实说,我平时不太在意自己到底写了多少行代码。

一方面是因为这东西真没啥太大参考价值,想刷行数的话,复制粘贴个几千行都不是事;另一方面也是因为谁都知道:代码质量和行数没什么关系

但有时候,好奇心就是挡不住。
就像你听到别人讲“十万小时定律”的时候,会突然想:

“哎,那我到底练习了多久?”

我写代码已经很多年了,也做了不少项目,大部分都丢在 GitHub 上没怎么管过。突然有天我就想:
“我这几年到底写了多少行代码?”

没什么远大目标,也不是为了攀比,就是想统计一下,纯图一乐。


发现了一个小工具:cloc#

为了满足这个好奇心,我去搜了一下有没有能统计代码行数的工具,结果发现了一个叫 cloc 的小东西。

用起来特别方便,直接在命令行跑一下,它就会帮你统计:

  • 每种语言用了多少文件;
  • 每种语言写了多少代码行;
  • 有多少注释行、空白行;

而且输出格式非常清爽,长这样:

-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
PHP                            213           4521           2349          19432
JavaScript                      75           1833           1102          10231
...
plaintext

看着还挺有成就感的(笑)。


但问题是:我的代码都在 GitHub 上#

工具虽然好用,但有个问题:

我的代码都放在 GitHub 上,平时根本没下载到本地,如果我想统计,就得先一个个仓库 clone 下来,太麻烦了。

所以我干脆就写了个脚本,把整个流程自动化了。


脚本主要做了三件事:#

  1. 通过 GitHub 官方的 gh 命令获取我账号下的所有仓库;
  2. 把这些仓库一个个同步到本地(已有就 pull,没有就 clone);
  3. 然后用 cloc 统计整个目录的代码行数,并排除掉构建/依赖目录。

简单说,就是把 GitHub 上的项目都打包带回家,然后用 cloc 数一数。


工具准备(支持 macOS / Ubuntu / Windows)#

这个脚本依赖以下几个命令行工具:

  • gh:GitHub CLI,用于获取仓库列表;
  • jq:命令行 JSON 解析工具,用于处理接口返回的数据;
  • cloc:统计代码行数的小工具;
  • git:当然少不了,用来 clone 仓库。

macOS 安装方法(用 Homebrew):#

brew install gh jq cloc git
bash

Ubuntu / Debian 安装方法:#

sudo apt update
sudo apt install gh jq cloc git
bash

Windows 安装方法(建议用 WSL)#

Windows 用户建议安装 WSL(Windows 子系统) 并使用 Ubuntu:

  1. 在 PowerShell(管理员)运行:

    wsl --install
    powershell
  2. 安装完成后打开 Ubuntu;

  3. 安装依赖:

    sudo apt update
    sudo apt install gh jq cloc git
    bash

GitHub CLI 登录一次(非常重要)#

运行脚本前,请先登录 GitHub CLI:

gh auth login
bash

它会引导你通过浏览器进行一次性授权。


脚本源码(可以直接用)#

#!/bin/bash

USERNAME="zxc7563598"   # 👈 改成你的 GitHub 用户名
WORKDIR="$HOME/github_repos"

# 创建存放仓库的目录
mkdir -p "$WORKDIR"
cd "$WORKDIR" || exit

echo "📥 正在获取 $USERNAME 的所有仓库..."

# 获取所有仓库的 HTTPS 地址(最多 200 个,可改成 1000)
gh repo list $USERNAME --limit 200 --json nameWithOwner,url \
  | jq -r '.[].url' | while read repo; do
    reponame=$(basename "$repo")
    if [ -d "$reponame" ]; then
        echo "🔄 更新仓库: $reponame"
        cd "$reponame" && git pull --quiet && cd ..
    else
        echo "⬇️ 克隆仓库: $reponame"
        git clone --depth=1 "$repo" --quiet
    fi
done

echo ""
echo "📊 开始统计代码行数(排除 node_modules、vendor、dist、build、public)..."
echo ""

cloc --exclude-dir=node_modules,vendor,dist,build,public --exclude-lang=JSON .
bash

运行结果展示#

执行脚本后,大概就会看到类似这样的输出结果(我的结果):

-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
PHP                           2334          14079          60356         613174
Vuejs Component                232           2273           1207          29480
JavaScript                     198           2769           2813          16292
CSS                             13           1566            182          13460
YAML                            15           3345              1          12314
HTML                            43            507            262          11776
Markdown                        52           1881             11           4773
Blade                           27            386             52           3942
Go                               4             80             65            887
WXSS                            10            118             19            753
Bourne Shell                     7            106            104            415
SVG                            350              0              0            415
WXML                             9              7             16            295
Protocol Buffers                 1              2              0            187
C                                1              6              0            101
Python                           1             32             29             91
XML                              1              0              2             29
INI                              2              4              0             20
Dockerfile                       1              1              0              5
DOS Batch                        1              0              0              3
CSV                              1              0              0              2
-------------------------------------------------------------------------------
SUM:                          3303          27162          65119         708414
-------------------------------------------------------------------------------
plaintext

当然,如果你并不像我一样需要从 GitHub 上同步仓库,那你大可不需要使用我的脚本,只需要在你想要统计的目录下执行 cloc . 就好了

是不是还挺有意思的?
虽然知道这个数字没啥特别实质意义,但看着这些年自己写的几万行代码,有点像翻相册的感觉。


总结一下#

  • cloc 是一个小巧但非常实用的代码行数统计工具;
  • 如果你的项目都放在 GitHub 上,可以配合 gh 做自动化统计;
  • 虽然代码行数并不重要,但偶尔看看还是挺开心的;

就当是一种和过去的自己打个招呼吧 ——
“嘿,我还在写代码,而且已经写了好多年了。”

我写了个脚本,统计了我自己写了多少行代码(纯图一乐)
https://hejunjie.life/blog/c02c3d6d
作者 何俊杰
发布时间 2025年8月8日
版权信息 CC BY-NC-SA 4.0
评论似乎卡住了,尝试刷新?✨