协慌网

登录 贡献 社区

如何递归计算目录中的所有代码行?

我们有一个 PHP 应用程序,并希望计算特定目录及其子目录下的所有代码行。我们不需要忽略评论,因为我们只是想弄清楚。

wc -l *.php

该命令在给定目录中运行良好,但忽略子目录。我当时认为这可行,但它正在返回 74,绝对不是这样......

find . -name '*.php' | wc -l

提供所有文件的正确语法是什么?

答案

尝试:

find . -name '*.php' | xargs wc -l

SLOCCount 工具也可能有所帮助。

它将为您指定的任何层次结构提供准确的源代码行数,以及一些其他统计信息。

对于另一个单线:

( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l

适用于带空格的名称,只输出一个数字。

如果使用最新版本的 Bash(或 ZSH),它会更简单:

wc -l **/*.php

在 Bash shell 中,这需要设置globstar选项,否则** glob-operator 不是递归的。要启用此设置,请发出

shopt -s globstar

要使其永久化,请将其添加到其中一个初始化文件( ~/.bashrc~/.bash_profile等)。