動態

詳情 返回 返回

我寫了個腳本,統計了我自己寫了多少行代碼(純圖一樂) - 動態 詳情

為什麼要做這件事?

老實説,我平時不太在意自己到底寫了多少行代碼。

一方面是因為這東西真沒啥太大參考價值,想刷行數的話,複製粘貼個幾千行都不是事;另一方面也是因為誰都知道:代碼質量和行數沒什麼關係

但有時候,好奇心就是擋不住。
就像你聽到別人講“十萬小時定律”的時候,會突然想:

“哎,那我到底練習了多久?”

我寫代碼已經很多年了,也做了不少項目,大部分都丟在 GitHub 上沒怎麼管過。突然有天我就想:
“我這幾年到底寫了多少行代碼?”

沒什麼遠大目標,也不是為了攀比,就是想統計一下,純圖一樂。


發現了一個小工具:cloc

為了滿足這個好奇心,我去搜了一下有沒有能統計代碼行數的工具,結果發現了一個叫 cloc 的小東西。

用起來特別方便,直接在命令行跑一下,它就會幫你統計:

  • 每種語言用了多少文件;
  • 每種語言寫了多少代碼行;
  • 有多少註釋行、空白行;

而且輸出格式非常清爽,長這樣:

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

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


但問題是:我的代碼都在 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

Ubuntu / Debian 安裝方法:

sudo apt update
sudo apt install gh jq cloc git

Windows 安裝方法(建議用 WSL)

Windows 用户建議安裝 WSL(Windows 子系統) 並使用 Ubuntu:

  1. 在 PowerShell(管理員)運行:

    wsl --install
  2. 安裝完成後打開 Ubuntu;
  3. 安裝依賴:

    sudo apt update
    sudo apt install gh jq cloc git

GitHub CLI 登錄一次(非常重要)

運行腳本前,請先登錄 GitHub CLI:

gh auth login

它會引導你通過瀏覽器進行一次性授權。


腳本源碼(可以直接用)

#!/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 .

運行結果展示

執行腳本後,大概就會看到類似這樣的輸出結果(我的結果):

-------------------------------------------------------------------------------
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
-------------------------------------------------------------------------------

當然,如果你並不像我一樣需要從 GitHub 上同步倉庫,那你大可不需要使用我的腳本,只需要在你想要統計的目錄下執行 cloc . 就好了

是不是還挺有意思的?
雖然知道這個數字沒啥特別實質意義,但看着這些年自己寫的幾萬行代碼,有點像翻相冊的感覺。


總結一下

  • cloc 是一個小巧但非常實用的代碼行數統計工具;
  • 如果你的項目都放在 GitHub 上,可以配合 gh 做自動化統計;
  • 雖然代碼行數並不重要,但偶爾看看還是挺開心的;
就當是一種和過去的自己打個招呼吧 ——
“嘿,我還在寫代碼,而且已經寫了好多年了。”
user avatar u_15745565 頭像 zjkal 頭像 yinan_5f40c19d52b29 頭像 koogua 頭像 shendaowu 頭像 aoshunseo 頭像
點贊 6 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.