计算代码行数
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 的代码,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
)和 Debian .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/be033061e091fea48a5bc9e8964cee0416ddd5b34bd5226a1c9aa4b30bdba66a?nocache=1
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?nocache=1
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/
如上所述,使用 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 子例程而不是 正则表达式。的检查 可能需要源代码进行进一步解释。 --help 打印此使用信息并退出。 --found=<文件> 将找到的每个文件的名称保存到<文件>。 --ignored=<文件> 保存被忽略文件的名称及其原因 被<文件>忽略。 --print-filter-stages 打印处理前后的源代码 应用每个过滤器。 --show-ext[=<ext>] 打印有关所有已知(或仅 给定)文件扩展名并退出。 --show-lang[=<lang>] 打印有关所有已知(或仅 给定)语言并退出。 --show-os 打印操作系统模式的值 并退出。另请参见--unix、--windows。 -v[=<n>] 详细开关(可选数值)。 -verbose[=<n>] -v 的长形式。 --version 打印该程序的版本并退出。 --write-lang-def=<file> 写入 <file> 语言处理过滤器 然后退出。作为创建的第一步很有用 自定义语言定义。注:以下语言 映射到相同文件扩展名的映射将被排除。 (另请参见 --force-lang-def、--read-lang-def)。 --write-lang-def-incl-dup=<文件> 与 --write-lang-def 相同,但包含重复的内容 扩展。这会生成有问题的语言 定义文件,因为 cloc 会拒绝使用 直到删除重复项。 输出选项 --3 打印第三代语言输出。 (此选项可能会导致报告求和失败 如果使用此选项生成一些报告 而其他的则在没有它的情况下生产。) --by-percent X 显示而不是注释和空行计数 这些值是基于该值的百分比 分母中的 X: X = 'c' -> # 行代码 X = 'cm' -> # 行代码 + 注释 X = 'cb' -> # 行代码 + 空格 X = 'cmb' -> # 行代码 + 注释 + 空格 例如,如果使用方法“c”和您的代码 注释行数是行数的两倍 代码中,注释栏中的值将 为 200%。代码列仍然是行数。 --csv 将结果写为逗号分隔值。 --csv-delimiter=<C> 使用字符 <C> 作为逗号的分隔符 分隔文件而不是 ,.此开关强制 --csv 打开。 --file-encoding=<E> 使用 <E> 编码而不是写入输出文件 默认 ASCII (<E> = 'UTF-7')。示例:“UTF-16”, “euc-kr”、“iso-8859-16”。已知的编码可以是 印有 perl -MEncode -e 'print join("n", Encode->encodings(":all")), "n"' --hide-rate 不显示行和文件处理速率 输出标头。这使得输出具有确定性。 --json 将结果写入 JavaScript 对象表示法 (JSON) 格式的输出。 --md 将结果写入 Markdown 格式的文本。 --out=<文件> --report-file=<文件> 的同义词。 --progress-rate=<n> 每 <n> 个文件更新后显示进度更新 已处理(默认 <n>=100)。将 <n> 设置为 0 即可 抑制进度输出(重定向时有用 输出到标准输出)。 --quiet 抑制除以下内容之外的所有信息消息 最终报告。 --report-file=<文件> 将结果写入 <文件> 而不是 STDOUT。 --sql=<文件> 将结果写入 SQL create 和 insert 语句 可以通过数据库程序读取,例如 SQLite。如果 <file> 为 -,则输出将发送到 STDOUT。 --sql-append 将 SQL 插入语句追加到指定的文件中 通过--sql并且不生成表创建 声明。仅与 --sql 选项一起有效。 --sql-project=<name> 使用 <name> 作为项目标识符 当前运行。仅与 --sql 选项一起有效。 --sql-style=<style> 以给定的样式编写 SQL 语句 默认 SQLite 格式。款式包括 “Oracle”和“Named_Columns”。 --sum-one 对于纯文本报告,显示 SUM: 输出行 即使只处理一个输入文件。 --xml 以 XML 形式写入结果。 --xsl=<文件> 将 <文件> 引用为 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(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) 哈斯克尔