计算代码行数?

Nik*_* R. 29 recursive source-code

如果我想计算代码行数,最重要的是

cat *.c *.h | wc -l

但是如果我有几个子目录怎么办?

Ho1*_*Ho1 63

最简单的方法是使用名为 的工具cloc。以这种方式使用它:

cloc .
Run Code Online (Sandbox Code Playgroud)

就是这样。:-)

  • @cat 没有什么是完美的,没有什么可以满足您过去和未来的所有需求。 (28认同)
  • @cat 根据 CLOC 文档,它可以在语言定义文件中读取,因此有一种方法可以让它识别尚未定义的语言中的代码。此外,它是开源的,因此您可以随时对其进行扩展以使其变得更好! (11认同)
  • -1 因为这个程序没有任何方法来识别它的小而无聊的大脑之外的语言中的代码行。它知道 Ada 和 Pascal、C 和 C++、Java 和 JavaScript 以及“企业”类型语言,但它拒绝仅通过文件扩展名来计算 SLOC,因此对于 DSL,甚至它碰巧不知道的语言完全没用关于。 (2认同)
  • 好吧,CLOC 拒绝承认的编程语言确实满足了我过去和未来的所有需求:) (2认同)

Ste*_*itt 44

你或许应该使用SLOCCountCLOC为此,他们正在为一个项目计算行源代码而设计的,不管目录结构等; 任何一个

sloccount .
Run Code Online (Sandbox Code Playgroud)

或者

cloc .
Run Code Online (Sandbox Code Playgroud)

将生成关于从当前目录开始的所有源代码的报告。

如果你想使用findand wc,GNUwc有一个不错的--files0-from选择:

find . -name '*.[ch]' -print0 | wc --files0-from=- -l
Run Code Online (Sandbox Code Playgroud)

(感谢SnakeDocCLOC建议!)

  • 根据代码行估算成本?所有受雇将意大利面条重新分解为可维护的东西的人呢? (12认同)

hee*_*ayl 12

由于该wc命令可以接受多个参数,因此您可以将所有文件名传递给wcusing GNU 操作的+参数:-execfind

find . -type f -name '*.[ch]' -exec wc -l {} +
Run Code Online (Sandbox Code Playgroud)

或者,在 中bash,使用 shell 选项globstar递归遍历目录:

shopt -s globstar
wc -l **/*.[ch]
Run Code Online (Sandbox Code Playgroud)

其他外壳默认情况下递归遍历(例如zsh)或具有类似的选项,例如globstar,至少大多数。


cof*_*Mug 5

您可以findxargs和一起使用wc

find . -type f -name '*.h' -o -name '*.c' | xargs wc -l
Run Code Online (Sandbox Code Playgroud)

  • (假设文件路径不包含空格、换行符、单引号、反斜杠字符的双引号。如果调用了多个 `wc`,它也可能输出多个 `total` 行。) (2认同)

Kot*_*tte 5

如果您处于无法访问cloc等的环境中,我建议您

find -name '*.[ch]' -type f -exec cat '{}' + | grep -c '[^[:space:]]'
Run Code Online (Sandbox Code Playgroud)

Run-through:find递归搜索所有名称以.cor结尾的常规文件,.hcat在其上运行。输出通过管道传输grep以计算所有非空行(包含至少一个非空格字符的行)。