計算程式碼行數
cloc 對許多程式語言中的空白行、註解行和原始程式碼的物理行進行計數。
最新版本:v2.02(2024 年 8 月 2 日)
cloc 自 2006 年 8 月起託管在 http://cloc.sourceforge.net/ 後,於 2015 年 9 月遷移到 GitHub。
步驟1:下載cloc(幾種方法,見下文)或運行cloc的docker映像。 Windows 執行檔沒有任何要求。 cloc 的來源版本需要 Perl 解譯器,而 cloc 的 Docker 版本需要 Docker 安裝。
步驟 2:開啟終端機(Windows 上為cmd.exe
)。
步驟 3:呼叫 cloc 來計算原始檔、目錄、檔案或 git 提交的數量。可執行檔名稱會有所不同,這取決於您使用的是開發來源版本 ( cloc
)、發布版本來源 ( cloc-2.02.pl
) 還是 Windows 執行檔 ( cloc-2.02.exe
)。
在此頁面上, cloc
是用來指稱其中任何一個的通用術語。
Include Security 有一個 YouTube 視頻,展示了實際操作步驟。
一個文件
提示> cloc hello.c 1 個文字檔。 1 個獨特的文件。 0 個文件被忽略。 https://github.com/AlDanial/cloc v 1.65 T=0.04 秒(28.3 檔案/秒,340.0 行/秒) -------------------------------------------------- ---------------------------- 語言檔案空白註解程式碼 -------------------------------------------------- ---------------------------- C 1 0 7 5 -------------------------------------------------- ----------------------------
一個目錄
提示> cloc gcc-5.2.0/gcc/c 16 個文字檔。 15 個獨特的文件。 3 個文件被忽略。 https://github.com/AlDanial/cloc v 1.65 T=0.23 秒(57.1 檔案/秒,188914.0 行/秒) -------------------------------------------------- ---------------------------- 語言檔案空白註解程式碼 -------------------------------------------------- ---------------------------- 中10 4680 6621 30812 C/C++ 標頭 3 99 286 496 -------------------------------------------------- ---------------------------- 總價:13 4779 6907 31308 -------------------------------------------------- ----------------------------
檔案
我們將從 GitHub 中提取 cloc 的來源 zip 文件,然後計算內容:
提示> wget https://github.com/AlDanial/cloc/archive/master.zip 提示> cloc master.zip https://github.com/AlDanial/cloc v 1.65 T=0.07 秒(26.8 檔案/秒,141370.3 行/秒) -------------------------------------------------- ---------------------------- 語言檔案空白註解程式碼 -------------------------------------------------- ---------------------------- 珀爾 2 725 1103 8713 -------------------------------------------------- ---------------------------- 總和:2 725 1103 8713 -------------------------------------------------- ----------------------------
git 儲存庫,使用特定的提交
此範例使用 PuDB(一個出色的 Python 偵錯器)中的程式碼。
提示> git clone https://github.com/inducer/pudb.git 提示> cd pudb 提示> cloc 6be804e07a5db 48 個文字檔。 41 個獨特的文件。 8 個文件被忽略。 github.com/AlDanial/cloc v 1.99 T=0.04 秒(1054.9 檔案/秒,189646.8 行/秒) -------------------------------------------------- ---------------------------- 語言檔案空白註解程式碼 -------------------------------------------------- ---------------------------- 蟒蛇 28 1519 728 4659 重構文本 6 102 20 203 yaml 2 9 2 75 伯恩外殼 3 6 0 17 文 1 0 0 11 使 1 4 6 10 -------------------------------------------------- ---------------------------- 總價:41 1640 756 4975 -------------------------------------------------- ----------------------------
特定目錄的每個子目錄
假設您有一個目錄,其中包含三個不同的 git 管理的專案:Project0、Project1 和 Project2。您可以使用 shell 的循環功能來計算每個中的程式碼。此範例使用 bash(向下滾動查看 cmd.exe 範例):
提示> for d in ./*/ ; do (cd "$d" && echo "$d" && cloc --vcs git);完畢 ./項目0/ 7 個文字檔。 7 個獨特的文件。 1 個文件被忽略。 github.com/AlDanial/cloc v 1.71 T=0.02 秒(390.2 檔案/秒,25687.6 行/秒) -------------------------------------------------- ---------------------------- 語言檔案空白註解程式碼 -------------------------------------------------- ---------------------------- d 4 61 32 251 降價 1 9 0 38 使 1 0 0 4 -------------------------------------------------- ---------------------------- 總和:6 70 32 293 -------------------------------------------------- ---------------------------- ./項目1/ 7 個文字檔。 7 個獨特的文件。 0 個文件被忽略。 github.com/AlDanial/cloc v 1.71 T=0.02 秒(293.0 檔案/秒,52107.1 行/秒) -------------------------------------------------- ---------------------------- 語言檔案空白註解程式碼 -------------------------------------------------- ---------------------------- 轉7 165 282 798 -------------------------------------------------- ---------------------------- 總金額:7 165 282 798 -------------------------------------------------- ---------------------------- ./項目2/ 49 個文字檔。 47 個獨特的文件。 13 個文件被忽略。 github.com/AlDanial/cloc v 1.71 T=0.10 秒(399.5 個檔案/秒,70409.4 行/秒) -------------------------------------------------- ---------------------------- 語言檔案空白註解程式碼 -------------------------------------------------- ---------------------------- 蟒蛇 33 1226 1026 3017 C 4 327 337 888 降價 1 11 0 28 yaml 1 0 2 12 -------------------------------------------------- ---------------------------- 總和: 39 1564 1365 3945 -------------------------------------------------- ----------------------------
特定目錄的每個子目錄 (Windows/cmd.exe)
for /D %I in (.*) do cd %I && cloc --vcs git && cd ..
cloc 會計算許多程式語言中的空白行、註解行和原始程式碼的物理行。給定程式碼庫的兩個版本,cloc 可以計算空白行、註解行和原始程式碼行中的差異。它完全用 Perl 編寫,不依賴 Perl v5.6 及更高版本的標準發行版(來自一些外部模組的程式碼嵌入在 cloc 中),因此非常可移植。已知 cloc 可以在多種版本的 Linux、FreeBSD、NetBSD、OpenBSD、macOS、AIX、HP-UX、Solaris、IRIX、z/OS 和 Windows 上運作。 (要在 Windows 上執行 cloc 的 Perl 來源版本,需要 ActiveState Perl 5.6.1 或更高版本、Strawberry Perl、Windows Subsystem for Linux、Cygwin、安裝了 Perl 外掛程式的 MobaXTerm,或 mingw 環境和終端,例如由另一個種方法是使用PAR::Packer 產生的cloc 的Windows 二進位檔案在既沒有Perl 也沒有Cygwin 的Windows 電腦上運行。
除了統計單一文字檔案、目錄和 git 儲存庫中的程式碼外, cloc 還可以統計檔案中的程式碼,例如.tar
(包括壓縮版本)、 .zip
、 Python Wheel .whl
、 Jupyter Notebook .ipynb
、來源 RPM .rpm
.src
rpm2cpio
.deb
dpkg-deb
cloc 包含來自 David Wheeler 的 SLOCCount、Damian Conway 和 Abigail 的 Perl 模組 Regexp::Common、Sean M. Burke 的 Perl 模組 Win32::Autoglob 和 Tye McQueen 的 Perl 模組 Algorithm::Diff 的程式碼。語言比例因子源自 Mayes Consulting, LLC 網站 http://softwareestimator.com/IndustryData2.htm。
新版本名義上每六個月發布一次。
docker run --rm -v $PWD :/tmp aldanial/cloc
docker run --rm -v " / $( pwd -W ) " :/tmp aldanial/cloc
根據您的作業系統,以下安裝方法之一可能適合您(Windows 的除最後兩個條目外的所有安裝方法都需要 Perl 解釋器):
npm install -g cloc # https://www.npmjs.com/package/cloc
sudo apt install cloc # Debian, Ubuntu
sudo yum install cloc # Red Hat, Fedora
sudo dnf install cloc # Fedora 22 or later
sudo pacman -S cloc # Arch
sudo emerge -av dev-util/cloc # Gentoo https://packages.gentoo.org/packages/dev-util/cloc
sudo apk add cloc # Alpine Linux
doas pkg_add cloc # OpenBSD
sudo pkg install cloc # FreeBSD
sudo port install cloc # macOS with MacPorts
brew install cloc # macOS with Homebrew
winget install AlDanial.Cloc # Windows with winget
choco install cloc # Windows with Chocolatey
scoop install cloc # Windows with Scoop
注意:我不控制這些包中的任何一個。如果您在使用上述套件之一時遇到 cloc 錯誤,請在提交問題報告之前嘗試使用從 GitHub 上的最新穩定版本中提取的 cloc(連結如下)。
https://github.com/AlDanial/cloc/releases/latest
https://github.com/AlDanial/cloc/raw/master/cloc
cloc 根據 GNU 通用公共許可證 v 2 獲得許可,不包括從其他來源複製的部分。從 Regexp::Common、Win32::Autoglob 和 Algorithm::Diff Perl 模組複製的程式碼受藝術授權的約束。
cloc 具有許多功能,使其易於使用、徹底、可擴展和可移植:
如果 cloc 不適合您的需求,可以考慮其他免費提供的計數器:
其他參考:
雖然 cloc 不需要標準發行版以外的 Perl 模組,但 cloc 確實依賴一些外部模組。來自其中三個外部模組(Regexp::Common、Win32::Autoglob 和 Algorithm::Diff)的程式碼嵌入在 cloc 中。第四個模組 Digest::MD5 僅在可用時才使用。如果 cloc 發現本地安裝了 Regexp::Common 或 Algorithm::Diff,它將使用這些安裝。如果沒有, cloc 將安裝所需的 Regexp::Common 和/或 Algorithm:Diff 部分到 cloc 運行開始時建立的臨時目錄,然後在運行完成時刪除。 Regexp::Common v2.120 和 Algorithm::Diff v1.1902 中的必要程式碼嵌入在 cloc 原始碼中(請參閱子程式Install_Regexp_Common()
和Install_Algorithm_Diff()
)。 Win32::Autoglob 中只需要三行,這些行直接包含在 cloc 中。
此外,如果本地安裝了 Digest::MD5, cloc 將使用 Digest::MD5 來驗證同等大小的輸入檔案之間的唯一性。
cloc 版本 1.76 引入了平行處理選項--processes= N ,以實現在多核心電腦上更快的運行。然而,要使用它,必須安裝 Parallel::ForkManager 模組。此模組在 Windows 上無法可靠運作,因此並行處理只能在類 Unix 作業系統上運作。
Windows 二進位檔案是在本機安裝了 Regexp::Common 和 Digest::MD5 的電腦上建置的。
建立 cloc 的 Windows 執行檔的最可靠的選項是使用 ActiveState 的 Perl 開發工具包。它包括一個實用程式perlapp
,它可以建立獨立的 Windows、Mac 和 Linux 二進位 Perl 原始碼。
perl2exe 也能做到這一點。如果您確實有perl2exe
,請修改 cloc 原始碼中的第 84-87 行,進行少量程式碼修改,這是製作 cloc Windows 執行檔所必需的。
否則,要使用PAR::Packer
中的pp
建置 Windows 可執行文件,請先按照說明安裝基於 Windows 的 Perl 發行版(例如 Strawberry Perl 或 ActivePerl)。接下來,打開命令提示字元(也稱為 DOS 視窗)並安裝 PAR::Packer 模組。最後,使用 cloc 原始碼呼叫新安裝的pp
指令來建立.exe
檔:
C:> cpan -i 摘要::MD5 C:> cpan -i 正規表示式::通用 C:> cpan -i 演算法::Diff C:> cpan -i PAR::Packer C:> cpan -i Win32::LongPath C:> pp -M Win32::LongPath -M 編碼::Unicode -M 摘要::MD5 -c -x -o cloc-2.02.exe cloc-2.02.pl
上述說明的一個變體是,如果您安裝了 Strawberry Perl 的便攜式版本,則需要先執行portableshell.bat
才能正確設定您的環境。
版本部分中的 Windows 可執行檔cloc-2.02.exe是在 64 位元 Windows 10 電腦上使用 Strawberry Perl 5.30.2 和 PAR::Packer 建置.exe
建置的。
理想情況下,沒有人需要 Windows 可執行文件,因為他們的電腦上安裝了 Perl 解釋器並且可以運行 cloc 原始檔。然而,在集中管理的企業 Windows 電腦上,這可能很困難或不可能。
隨 cloc 分發的 Windows 可執行檔是盡最大努力不含病毒和惡意軟體的.exe
提供的。我們鼓勵您針對可執行檔案執行自己的病毒掃描程序,並檢查 https://www.virustotal.com/ 等網站。最新版本的條目是:
cloc-2.02-winget.exe:(包括 PR 850,允許在 Windows 上從符號鏈接運行)https://www.virustotal.com/gui/file/be033061e091fea48a5bc9e8964cee0416ddd5b34bd5226ac9e8964cee0416ddd5b34bd5226abachec
cloc-2.02.exe:https://www.virustotal.com/gui/file/369ed76125f7399cd582d169adf39a2e08ae5066031fea0cc8b2836ea50e7ce2?nocache=1
cloc-2.00.exe:https://www.virustotal.com/gui/file/7a234ef0cb495de1b5776acf88c5554e2bab1fb02725a5fb85756a6db3121c1f
cloc-1.98.exe:https://www.virustotal.com/gui/file/88615d193ec8c06f7ceec3cc1d661088af997798d87ddff331d9e9f9128a6782?nocache=1
cloc-1.96.1.exe:https://www.virustotal.com/gui/file/00b1c9dbbfb920dabd374418e1b86d2c24b8cd2b8705aeb956dee910d0d75d45?nocache=1
cloc-1.96.exe:https://www.virustotal.com/gui/file/54bf5f46fbaba7949c4eb2d4837b03c774c0ba587448a5bad9b8efc0222b1583?nocache587448a5bad9b8efc0222b1583?nocache=11
cloc-1.94.exe:https://www.virustotal.com/gui/file/b48a6002fb75fa66ec5d0c05a5c4d51f2ad22b5b025b7eb4e3945d18419c0952?nocache=1
cloc-1.92.exe:https://www.virustotal.com/gui/file/2668fcf8609c431e8934fe9e1866bc620c58d198c4eb262f1d3ef31ef4a690f7
cloc-1.90.exe:https://www.virustotal.com/gui/file/d655caae55486f9bac39f7e3c7b7553bcfcfe2b88914c79bfc328055f22b8a37/detection
cloc-1.88.exe:https://www.virustotal.com/gui/file/97d5d2631d1ccccdbfd99267ab8a4cf5968816bbe52c0f9324e72e768857f642d/detection
cloc-1.86.exe:https://www.virustotal.com/gui/file/1b2e189df1834411b34534db446330d1c379b4bc008af3042ee9ade818c6a1c8/detection
cloc-1.84.exe:https://www.virustotal.com/gui/file/e73d490c1e4ae2f50ee174005614029b4fa2610dcb76988714839d7be68479af/detection
cloc-1.82.exe:https://www.virustotal.com/#/file/2e5fb443fdefd776d7b6b136a25e5ee2048991e735042897dbd0bf92efb16563/detection
cloc-1.80.exe:https://www.virustotal.com/#/file/9e547b01c946aa818ffad43b9ebaf05d3da08ed6ca876ef2b6847be3bf1cf8be/detection
cloc-1.78.exe:https://www.virustotal.com/#/file/256ade3df82fa92febf2553853ed1106d96c604794606e86efd00d55664dd44f/detection
cloc-1.76.exe:https://www.virustotal.com/#/url/c1b9b9fe909f91429f95d41e9a9928ab7c58b21351b3acd4249def2a61acd39d/detection
cloc-1.74_x86.exe:https://www.virustotal.com/#/file/b73dece71f6d3199d90d55db53a588e1393c8dbf84231a7e1be2ce3c5a0ec75b/detection
cloc 1.72 exe:https://www.virustotal.com/en/url/8fd2af5cd972f648d7a2d7917bc202492012484c3a6f0b48c8fd60a8d395c98c/analysis/
cloc 1.70 exe:https://www.virustotal.com/en/url/63edef209099a93aa0be1a220dc7c4c7ed045064d801e6d5daa84ee624fc0b4a/analysis/
cloc 1.68 exe:https://www.virustotal.com/en/file/c484fc58615fc3b0d5569b9063ec1532980281c3155e4a19099b11ef1c24443b/analysis/
cloc 1.66 exe:https://www.virustotal.com/en/file/54d6662e59b04be793dd10fa5e5edf7747cf0c0cc32f71eb67a3cf8e7a171d81/analysis/1453601367/60130
如上所述,使用 perl2exe 建立的 cloc 版本 1.60 及更早版本的 Windows 可執行檔約為 1.6 MB,而使用PAR::Packer
建立的版本 1.62 和 1.54 則為 11 MB。版本 1.66 使用較新版本的PAR::Packer
構建,大小約為 5.5 MB。為什麼PAR::Packer
可執行檔比用 perl2exe 建置的可執行檔大得多?我的理論是 perl2exe 使用比PAR::Packer
更聰明的樹修剪邏輯,但這純粹是猜測。
cloc 是一個命令列程序,它將檔案、目錄和/或存檔名稱作為輸入。以下是針對 Perl v5.22.0 原始碼發行版運行 cloc 的範例:
提示> cloc perl-5.22.0.tar.gz 5605 個文字檔。 5386 個獨特的文件。 2176 個文件被忽略。 https://github.com/AlDanial/cloc v 1.65 T=25.49 秒(134.7 檔案/秒,51980.3 行/秒) -------------------------------------------------- --------------------------------- 語言檔案空白註解程式碼 -------------------------------------------------- --------------------------------- 珀爾 2892 136396 184362 536445 中130 24676 33684 155648 C/C++ 頭檔 148 9766 16569 147858 伯恩殼牌 112 4044 6796 42668 帕斯卡 8 458 1603 8592 XML 33 142 0 2410 yaml 49 20 15 2078 C++ 10 313 277 2033 製造 4 426 488 1986 序言 12 438 2 1146 JSON 14 1 0 1037 yacc 1 85 76 998 Windows 訊息檔案 1 102 11 489 DOS 批次 14 92 41 389 Windows 資源檔案 3 10 0 85 d 1 5 7 8 口齒不清 2 0 3 4 -------------------------------------------------- --------------------------------- 總和: 3434 176974 243934 903874 -------------------------------------------------- ---------------------------------
要在 Windows 電腦上執行 cloc,請開啟命令(又稱 DOS)視窗並從命令列呼叫 cloc.exe。或者,嘗試 ClocViewer,這是 cloc 的 GUI 包裝器,位於 https://github.com/Roemer/ClocViewer。
另請參閱 https://github.com/jmensch1/codeflower 以了解 cloc 結果的圖形渲染。
提示> cloc --help 用法: cloc [選項] <檔案/目錄/git hash> | <組 1> <組 2> | <報告文件> 計算或計算原始程式碼中物理行的差異 給定檔案(可能是壓縮 tarball 或 zip 檔案等檔案, 或 git commit 哈希值或分支名稱)和/或遞歸地低於 給定的目錄。 輸入選項 --extract-with=<cmd> 僅當 cloc 無法使用時才需要此選項 弄清楚如何提取內容 輸入檔本身。 使用 <cmd> 提取二進位存檔檔案(例如: .tar.gz、.zip、.Z)。使用文字 '>FILE<' 作為 實際文件的替代品 提取的。例如,計算程式碼行數 在輸入檔中 gcc-4.2.tar.gz perl-5.8.8.tar.gz 在 Unix 上使用 --extract-with='gzip -dc >檔< |焦油 xf-' 或者,如果你有 GNU tar, --extract-with='tar zxf >檔<' 在 Windows 上使用,例如: --extract-with=""c:Program FilesWinZipWinZip32.exe" -e -o >FILE< ." (如果 WinZip 安裝在那裡)。 --list-file=<檔案> 取得檔案和/或目錄名稱列表 來自 <file> 的進程,該檔案/目錄有一個檔案/目錄 每行的名稱。僅計算完全匹配; 相對路徑名將從下列位置開始解析 呼叫 cloc 的目錄。設定<檔案> to - 從 STDIN 管道讀取檔案名稱。 另請參閱--排除清單檔案。 --diff-list-file=<file> 取得要比較的檔名對 <file>,其格式與輸出匹配 --差異對齊。 (使用該選項運行 請參閱範例。 每行的末尾被忽略。這啟用了 --diff 模式並繞過檔案對對齊邏輯。 --vcs=<VCS> 呼叫系統呼叫 <VCS> 以取得列表 要處理的文件。如果 <VCS> 是“git”,那麼將 呼叫“git ls-files”來取得檔案清單並 'git submodule status' 取得子模組列表 其內容將被忽略。另請參閱--git 它接受 git commit 哈希值和分支名稱。 如果 <VCS> 是“svn”,則會呼叫“svn list -R”。 主要好處是 cloc 將跳過 版本控制工具明確排除的文件 有問題的,即 .gitignore 中的或具有 svn:忽略屬性。 或 <VCS> 可以是任何系統指令 產生文件列表。 注意:cloc必須位於可以讀取的目錄中 <VCS> 傳回的檔案。克洛克將 不從遠端儲存庫下載檔案。 「svn list -R」可能指的是遠端儲存庫 取得檔案名稱(因此可能需要 對遠端儲存庫進行身份驗證),但是 文件本身必須是本地的。 將 <VCS> 設定為「auto」可在「git」之間進行選擇 和 'svn' (或兩者都不),取決於是否存在 目錄下的 .git 或 .svn 子目錄 cloc 被呼叫的地方。 --unicode 檢查二進位檔案是否包含 Unicode 擴展的 ASCII 文字。這會導致效能 明顯下降。 處理選項 --autoconf 計數 .in 檔案(由 GNU autoconf 處理) 公認的語言。另請參閱--no-autogen。 --by-file 報告遇到的每個來源檔案的結果。 --by-file-by-lang 報告遇到的每個來源檔案的結果 除了按語言進行報告外。 --config <file> 從 <file> 讀取命令列開關而不是 /home/al/.config/cloc/options.txt 的預設位置。 該文件應包含一個開關以及 每行參數(如果有)。空行和空白行 以“#”開頭的將被跳過。給出的選項 命令列優先於讀取的條目 文件。 --count-and-diff <設定1> <設定2> 首先執行原始檔的直接程式碼計數 分別對 <set1> 和 <set2> 進行比較,然後執行 diff 這些。輸入可以是檔案對、目錄對、 或檔案。如果給了 --out 或 --report-file , 將建立三個輸出文件,每個文件一個 兩個計數的一個和一個差異的計數。參見 --diff、--diff-對齊、--diff-超時、 --忽略大小寫,--忽略空白。 --diff <set1> <set2> 計算之間的程式碼和註解的差異 <set1> 和 <set2> 的來源檔。輸入 可以是文件、目錄、檔案的任意組合, 或 git 提交哈希值。使用 --diff-alignment 來 產生一個列表,顯示哪些文件對位於何處 比較的。比較 git 分支時,僅比較文件 比較任一提交中已更改的內容。 另請參閱 --git、--count-and-diff、--diff-alignment、 --diff-列表文件,--diff-超時,--忽略大小寫, --忽略空白。 --diff-timeout <N> 忽略耗時超過 <N> 秒的文件 來處理。預設值為 10 秒。設定<N> 為 0 允許無限時間。 (大文件有很多 重複的行可能會導致 Algorithm::Diff::sdiff() 需要幾個小時。 --docstring-as-code cloc 認為文件字串是註釋,但這是 並不總是正確的,因為文檔字串代表常規 當字串出現在右側時 賦值或作為函數參數。這個開關 強制將文檔字串計為代碼。 --follow-links [僅限 Unix] 追蹤目錄的符號鏈接 (始終遵循文件的符號連結)。 另請參閱--stat。 --force-lang=<語言>[,<擴充>] 處理所有具有 <ext> 副檔名的文件 與語言 <lang> 的計數器。為了 例如,要對所有 .f 檔案進行計數 Fortran 90 計數器(預計文件 以 .f90 結尾)而不是預設的 Fortran 77 計數器,使用 --force-lang="Fortran 90,f" 如果省略<ext>,則每個檔案都會被計數 與 <lang> 計數器。該選項可以是 指定多次(但這只是 每次給出 <ext> 時很有用)。 另請參閱--script-lang、--lang-no-ext。 --force-lang-def=<檔案> 從 <檔案> 載入語言處理過濾器, 然後使用這些過濾器而不是內建的 過濾器。注意:映射到相同的語言 檔案副檔名(例如: MATLAB/Mathematica/Objective-C/MUMPS/Mercury; 帕斯卡/PHP; Lisp/OpenCL; Lisp/茱莉亞; Perl/Prolog) 將被忽略,因為這些需要額外的 無法用語言表達的處理 定義檔。使用 --read-lang-def 來定義 新的語言過濾器無需更換內建的 過濾器(另請參閱 --write-lang-def, --write-lang-def-incl-dup)。 --git 強制將輸入解釋為 git 目標 (提交哈希值、分支名稱等)如果這些 首先不被識別為檔案或目錄 名稱。此選項覆蓋 --vcs=git 邏輯 如果給出這個;換句話說,--git 得到了它的 使用 git 直接處理的檔案列表 哈希或分支名稱而不是來自 'git ls 檔案'。該選項可與 --diff 執行 git 之間的行數差異 提交,或 git 提交和文件之間, 目錄或存檔。使用-v/--verbose查看 git 系統指令 cloc 問題。 --git-diff-rel 與 --git --diff 相同,或者如果輸入則只是 --diff 被識別為 git 目標。僅文件 比較任一提交中的變更。 --git-diff-all Git diff 策略#2:比較目錄中的所有文件 兩次提交之間的儲存庫。 --ignore-whitespace 比較檔案時忽略水平空白 與--diff。另請參閱--忽略大小寫。 --ignore-case 忽略檔案內容中大小寫的變更; 考慮大小寫字母等效 使用 --diff 比較文件時。參見 --忽略空白。 --ignore-case-ext 忽略檔案副檔名的大小寫。這將 導致某些語言計數出現問題 (具體來說,.c 和 .C 與 C 和 C++;此開關會將 .C 文件視為 C 文件,而不是 高於 *nix 作業系統上的 C++)。檔案名稱 Windows 上始終不區分大小寫。 --lang-no-ext=<lang> 使用 <lang> 對不含副檔名的檔案進行計數 櫃檯。此選項覆蓋內部邏輯 對於沒有副檔名的檔案(其中此類文件 根據已知的腳本語言進行檢查 檢查第一行是否有#!)。參見 --force-lang,--script-lang。 --max-file-size=<MB> 跳過大於 <MB> 兆位元組的文件 遍歷目錄。預設情況下,<MB>=100。 cloc的記憶體需求大約是它的二十倍 大於最大文件,因此運行 在電腦上儲存大於 100 MB 的文件 超過 2 GB 的記憶體會導致問題。 注意:此檢查不適用於文件 作為命令列參數明確傳遞。 --no-autogen[=list] 忽略程式碼產生系統產生的文件 例如 GNU autoconf。查看這些文件的列表 (然後退出),使用 --no-autogen list 運行 另請參見--autoconf。 --original-dir [僅與以下組合有效 --strip-comments] 寫入剝離的文件 到與原始檔案相同的目錄。 --read-binary-files 除了文字檔案之外還處理二進位檔案。 這通常是個壞主意,應該只 嘗試使用嵌入的文字文件 二進制數據。 --read-lang-def=<檔案> 從 <檔案> 載入新的語言處理過濾器 並將它們與已知的 cloc 合併。 如果 <file> 定義了 cloc 已經知道的語言 關於,cloc 的定義將優先。 使用 --force-lang-def 覆蓋 cloc 的 定義(另請參閱 --write-lang-def, --write-lang-def-incl-dup)。 --script-lang=<lang>,<s> 處理所有以 #! 形式呼叫 <s> 的文件 帶有語言計數器的腳本語言 <語言>。例如,以以下內容開頭的文件 #!/usr/local/bin/perl5.8.8 將使用 Perl 計數器進行計數 --script-lang=Perl,perl5.8.8 語言名稱不區分大小寫,但 腳本語言可執行檔的名稱,<s>, 必須有正確的案例。該選項可以是 指定多次。另請參閱--force-lang, --lang-無副檔名。 --sdir=<dir> 使用 <dir> 作為暫存目錄而非 讓 File::Temp 選擇位置。文件 寫入此位置的內容不會被刪除 運行結束(與 File::Temp 一樣)。 --skip-uniqueness 跳過檔案唯一性檢查。這將給 以犧牲計數為代價來提高效能 多次出現相同內容的文件 (如果存在此類重複項)。 --stat 一些檔案系統(AFS、CD-ROM、FAT、HPFS、SMB) 沒有符合的目錄“nlink”計數 其子目錄的數量。最後 cloc 可能會低估或完全跳過 此類文件系統的內容。這個開關強制 File::Find 到 stat 目錄以取得 正確計數。文件搜尋速度將會降低。 另請參閱--follow-links。 --stdin-name=<檔案> 給予用於確定語言的檔名 用於標準輸入。 (使用 - 作為輸入名稱 透過 STDIN 接收原始碼。 --strip-comments=<ext> 對於處理的每個文件,寫入目前 目錄中包含空白的檔案版本 並刪除了註解行(行內註釋 堅持)。每個剝離文件的名稱是 原始檔名附加 .<ext>。 它被寫入當前目錄,除非 --original-dir 已開啟。 --strip-str-comments 將字串中嵌入的註解標記替換為 'xx'。這試圖解決一個限制 在 Regexp::Common::Comment 中,其中註解標記 嵌入字串中被視為實際註釋 標記而不是字串,通常會導致 '複雜正則子表達式遞歸限制' 警告和錯誤計數。有兩個 使用此開關的缺點:1/代碼計數 效能下降,並且 2/ 生成的程式碼 --strip-comments 將包含不同的字串 在哪裡可以找到嵌入的評論。 --sum-reports 輸入參數是先前的報告文件 使用 --report-file 選項以普通格式建立 格式(例如,不是 JSON、YAML、XML 或 SQL)。 產生一組累積結果,其中包含 來自各個報告文件的數據總和。 --timeout <N> 忽略耗時超過 <N> 秒的文件 在任何語言的過濾階段進行處理。 預設的最大花費秒數 過濾階段是檔案中的行數 除以千。將 <N> 設為 0 允許 無限時間。另請參閱--diff-timeout。 --processes=NUM [僅在具有最新版本的系統上可用 Parallel::ForkManager 模組的。不是 在 Windows 上可用。 cloc 使用的核心。預設值 0 禁用多處理。 --unix 覆蓋作業系統自動偵測 邏輯並在 UNIX 模式下運作。參見 --windows,--show-os。 --use-sloccount 如果安裝了 SLOCCount,則使用其編譯的 可執行檔 c_count、java_count、pascal_count、 php_count 和 xml_count 而不是 cloc 的 櫃檯。 SLOCCount 的編譯計數器是 比 cloc 快得多,並且可能會給出 計算項目時的效能改進 與大文件。然而,這些特定於時鐘的 功能將無法使用:--diff, --count-and-diff、--strip-comments、--unicode。 --windows 覆蓋作業系統自動偵測 邏輯並在 Microsoft Windows 模式下運作。 另請參閱 --unix、--show-os。 過濾器選項 --include-content=<regex> 只計算包含與 給定正規表示式。 --exclude-content=<regex> 排除包含與給定相符的文字的文件 正規表示式。 --exclude-dir=<D1>[,D2,] 排除給定的逗號分隔目錄 D1、D2、D3 等不被掃描。為了 範例 --exclude-dir=.cache,測試將跳過 所有具有 /.cache/ 的檔案和子目錄 或 /test/ 作為其父目錄。 名為 .bzr、.cvs、.hg、.git、.svn 的目錄 和 .snapshot 始終被排除。 此選項僅適用於單一目錄 名稱,因此不包括檔案路徑分隔符 允許。使用 --fullpath 和 --not-match-d=<regex> 提供符合多個子目錄的正規表示式。 --exclude-ext=<ext1>[,<ext2>[...]] 不計算具有給定文件名的文件 擴展。 --exclude-lang=<L1>[,L2[...]] 排除給定的逗號分隔語言 L1、L2、L3 等等,都被計數。 --exclude-list-file=<檔案> 忽略其名稱的檔案和/或目錄 出現在<檔案>中。 <file> 應該有一個文件 每行的名稱。僅忽略完全匹配; 相對路徑名將從下列位置開始解析 呼叫 cloc 的目錄。 另請參閱--列表文件。 --fullpath 修改 --match-f、--not-match-f、的行為 和 --not-match-d 包含檔案的路徑 在正規表示式中,不僅僅是檔案的基本名稱。 (這不會擴展每個文件以包含其 絕對路徑,而是使用盡可能多的 傳遞給 cloc 的路徑。 注意:--match-d 總是查看完整的 路徑,因此不受 --fullpath 的影響。 --include-ext=<ext1>[,ext2[...]] 僅計算具有給定逗號的語言 分隔的檔案副檔名。使用 --show-ext 來 查看已識別的副檔名。 --include-lang=<L1>[,L2[...]] 僅計算給定的逗號分隔語言 L1、L2、L3 等等。使用--show-lang查看 公認的語言清單。 --match-d=<regex> 只計算與 Perl 相符的目錄中的文件 正規表示式。例如 --match-d='/(src|include)/' 只計算包含以下內容的目錄中的文件 /src/ 或 /include/。與--not-match-d不同, --match-f 和 --not-match-f、--match-d 始終 將完全限定路徑與 正規表示式。 --not-match-d=<regex> 計算除目錄中的文件之外的所有文件 匹配 Perl 正規表示式。僅尾隨 比較目錄名稱,例如,當 算在 /usr/local/lib 中,只有 'lib' 是 與正規表示式相比。 新增 --fullpath 來比較父目錄 正規表示式。 不要在檔案路徑中包含分隔符 正規表示式的開頭或結尾。 --match-f=<regex> 只計算基本名稱與 Perl 相符的文件 正規表示式。例如 --match-f='^[Ww]idget' 只計算以 Widget 或 widget 開頭的檔案。 新增 --fullpath 以包含父目錄 在正規表示式中而不僅僅是基本名稱。 --not-match-f=<regex> 計算除基本名稱之外的所有文件 匹配 Perl 正規表示式。新增 --fullpath 以包含 正規表示式中的父目錄而不僅僅是 基本名稱。 --skip-archive=<regex> 忽略以給定 Perl 正規結尾的文件 表達。例如,如果給定 --skip-archive='(zip|tar(.(gz|Z|bz2|xz|7z))?)' 程式碼將跳過以 .zip 結尾的文件, .tar、.tar.gz、.tar.Z、.tar.bz2、.tar.xz 和 .tar.7z。 --skip-win-hidden 在 Windows 上,忽略隱藏檔案。 偵錯選項 --categorized=<檔案> 以位元組為單位儲存檔案大小,辨識的語言 以及分類文件的名稱到<文件>。 --counted=<檔案> 將已處理的來源檔案的名稱儲存到<檔案>。 --diff-alignment=<file> 將檔案和檔案對的清單寫入 <file> 顯示新增、刪除和/或哪些文件 在運行期間與 --diff 進行比較。這個開關 強制啟用 --diff 模式。 --explain=<lang> 列印用於刪除註解的篩選器 語言 <lang> 並退出。在某些情況下 過濾器引用 Perl 子程式而不是 正規表示式。的檢查 可能需要原始程式碼進行進一步解釋。 - 支援此用法資訊和退出。 -found = <file>將發現的每個檔案的名稱儲存到<file>。 -ignored = <file>保存忽略的檔案的名稱和它們的原因 被忽略到<file>。 - PRINT-FILTER階段在之前和之後列印處理的原始程式碼 應用每個過濾器。 -Show-ext [= <ext>]列印所有已知的資訊(或只是 給定的)檔案副檔名和退出。 -Show-lang [= <lang>]列印有關所有已知的資訊(或只是 給定的)語言和退出。 -Show-OS列印作業系統模式的值 並退出。另請參見 - unix, - 視窗。 -v [= <n>]詳細開關(可選數字值)。 -verbose [= <n>] -v的長形式。 - version列印此程式的版本和退出。 -write-lang-def = <file>寫入<file>語言處理過濾器 然後退出。作為創建的第一步 自訂語言定義。注意:哪種語言 將排除到相同檔案副檔名的地圖。 (另請參見 - -force-lang-def,-Read-lang-def)。 -write-lang-def-incl-dup = <file> 與-write-lang-def相同,但包括重複 擴展。這會產生有問題的語言 定義文件,因為Cloc會拒絕使用 它直到刪除重複。 輸出選項 --3列印第三代語言輸出。 (此選項可能會導致報告求和失敗 如果此選項產生了一些報告 而其他人則是沒有它的。 - 以百分點x而不是評論和空白行計數,顯示 這些值作為基於價值的百分比 分母中的X: x ='c' - >#程式碼行 x ='cm' - >#代碼 +評論行 x ='cb' - >#程式碼 +空白行 x ='cmb' - >#代碼 +註解 +空白 例如,如果使用方法“ C”和您的程式碼 評論的評論是線條的兩倍 在程式碼中,評論列中的值將 是200%。代碼列仍然是線計數。 -CSV將結果寫成逗號分隔值。 -CSV-DELIMITER = <c>使用字元<c>作為逗號的定界符 分開的文件而不是。此開關強制 - CSV要打開。 -file-incoding = <e>使用<e>編碼而不是編碼輸出文件 預設的ASCII(<e> ='utf-7')。範例:“ UTF-16”, 'euc-kr','ISO-8859-16'。已知的編碼可以是 印有 perl -mencode -e'print join(“ n”,encode-> condings(“:all”)),“ n”'' - 隱藏率在 輸出標頭。這使輸出確定性。 - JSON將結果寫為JavaScript物件符號 (JSON)格式輸出。 -MD將結果寫成Markdown-formatted文本。 - out = <file> - report-file = <file>的同義字。 - progress-rate = <n>每個檔案都 處理(預設<n> = 100)。將<n>設定為0 抑制進度輸出(重定向時有用 輸出到stdout)。 - quiet壓制所有資訊訊息除外 最終報告。 - report-file = <file>將結果寫入<file>而不是STDOUT。 -sql = <file>將結果寫成SQL建立和插入語句 可以透過資料庫程式來閱讀,例如 SQLite。如果<file>是 - ,則將輸出傳送到Stdout。 -SQL-申請附錄SQL插入語句指定的文件 透過 - -SQL,不生成表創建 聲明。僅適用於-SQL選項。 -sql-project = <姓名>使用<姓名>作為項目標識符 目前運行。僅適用於-SQL選項。 -SQL-style = <style>用給定樣式寫SQL語句 預設的SQLite格式。樣式包括 'oracle'和“ nature_columns”。 - 純文字報告的sum-,顯示總和:輸出行 即使僅處理一個輸入檔。 -XML在XML中寫入結果。 -xsl = <file>參考<file>作為XSL樣式表中的 XML輸出。如果<file>是1(數字一個), 寫預設樣式表,cloc.xsl(或 cloc-diff.xsl if-diff也給)。 此開關強制-XML開啟。 - yaml在yaml中寫下結果。
提示> cloc -show-lang ABAP(ABAP) ActionScript(AS) ADA(ADA,ADB,ADS,PAD) ADSO/IDSM(ADSO) Agda(Agda,Lagda) 充足(充足,多菲爾,啟動) Ansprolog(LP) 螞蟻(build.xml,build.xml) Antlr語法(G,G4) Apex類別(CLS) Apex觸發(觸發) APL(APL,APLA,APLC,APLF,APLI,APLN,APLO,DYALOG,DYAPP,MIPAGE) AppleScript(蘋果腳本) Arduino素描(Ino) ARKTS(ETS) 阿圖羅(藝術) Asciidoc(ADOC,ASCIIDOC) ASP(ASA,ASHX,ASP,AXD) ASP.NET(ASAX,ASCX,ASMX,ASPX,Master,SiteMap,Webinfo) expackJ(AJ) 組件(A51,ASM,NASM,S,S) Astro(Astro) 漸近線(ASY) autohotkey(ahk,ahkl) 噢(Auk,Awk,Gawk,Mawk,Nawk) Bazel(建構) BizTalk編排(ODX) BizTalk管道(BTP) 刀片(Blade,Blade.php) Bourne再次外殼(bash) 伯恩·殼(SH) Brightscript(BRS) 建築商(xml.builder) C(C,C,Cats,EC,IDC,PGC) C外殼(CSH,TCSH) C#(CS) C#設計師(Designer.cs) C ++(C,C ++,C ++ M,CC,CCM,CPP,CPP,CPP,CPPM,CXX,CXXM,H ++,INL,IPP,IPP,IXX,PCC,TCC,TCC,TPP ) C/C ++標頭(H,H,HH,HP,HPP,HXX) 開羅(開羅) 蛋糕製作腳本(蛋糕) 碳(碳) CCS(CCS) 教堂(CHPL) 圓形(圓形) 清潔(DCL,ICL) clojure(Boot,CL2,CLJ,CLJS.HL,CLJSCM,CLJX,HIC,RIEMANN.CONFIG) Clojurec(CLJC) clojurescript(CLJS) cmake(cmake,cmake.in,cmakelists.txt) COBOL(CBL,CBL,CCP,COB,COB,COBOL,CPY) 可可5(C5,Cocoa5,可可s5server,CPKG5) Coffeescript(_coffee,Cakefile,CJSX,咖啡,冰) ColdFusion(CFM,CFML) ColdFusion CFScript(CFC) 約束語法(CG3,RLX) 貨櫃(ContarerFile) COQ(V) 晶體(CR) CSON(CSON) CSS(CSS) CSV (csv) 黃瓜(特徵) cuda(cu,cuh) Cython(PXD,PXI,PYX) d(d) 達夫(DFY) dal(da) 飛鏢(飛鏢) Delphi形式(DFM) Denizenscript(DSC) derw(derw) dhall(dhall) 飲食(DT) diff(diff,patch) dita(dita) Dockerfile(Dockerfile,Dockerfile) 門擴展語言(DXL) DOS批次(蝙蝠,蝙蝠,BTM,BTM,CMD,CMD) 流口水(DRL) DTD(DTD) dtrace(D) ECPP(ECPP) EEX(EEX) EJS(EJS) 長生不老藥(ex,exs) 榆樹(榆樹) 嵌入晶體(ECR) ERB(ERB,ERB) erlang(app.src,emakefile,erl,hrl,rebar.config,rebar.config.lock,rebar.lock,xrl,yrl) 期望(EXP) F#(FSI,FS,FS) F#腳本(FSX) 茴香(FNL) 有限的狀態語言(FSL,JSSM) 魚殼(魚) Flatbuffers(FBS) 焦點(focexec) forth(4th,e4,f83,fb,fort,fpm,fr,frt,ft,ft,fth,rx,fs,f,for) Fortran 77(F,F,F77,F77,FTN,FTN,FTN,PFO,F,for) Fortran 90(F90,F90) Fortran 95(F95,F95) Freemarker模板(FTL) futhark(fut) FXML(FXML) GDScript(GD) Gencat NLS(MSG) GLADE(GLADE,UI) 閃閃發光(閃閃發光的) 閃爍的JavaScript(GJS) 微光打字稿(GTS) glsl(comp,fp,frag,frg,fsh,fshader,geo,geom,glsl,glsl,glslv,gshader,tesc,tese,tese,vert,vrx,vsh,vsh,vshader) 去(去,ʕ◔ϖ◔ʔ) Godot資源(TRE) Godot場景(TSCN) Godot著色器(GDSHADER) gradle(gradle,gradle.kts) 聖杯(GSP) GraphQl(GQL,GraphQl,GraphQls) Groovy(Gant,Groovy,Grt,GTPL,Gvy,Jenkinsfile) haml(haml,haml.deface) 車把(車把,HB) 港口(HB) 野兔(HA) 哈斯克爾