bash - 怎样递归目录来计算所有代码行数?

  显示原文与译文双语对照的内容

我们有一个PHP应用程序,想要计算一个特定目录及其子目录下的所有代码行。 我们不需要忽略评论,因为我们只是想得到一个粗略的想法。

 
wc -l *.php

 

命令在给定的目录中工作很好,但忽略子目录。 我想这可能有用,但它返回 74,这绝对不是事实。


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

在所有文件中输入的正确语法是什么?

时间:

英镑尝试:


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

this这里 可能也有助于。

它将为你指出的任何层次提供精确的代码行,以及一些额外的统计数据。

如果使用最新版本的Bash ( 或者 ZSH ),那么它就更简单了:

 
wc -l **/*.php

 

在bashshell中这需要 globstar 选项可以被设置,否则 ** glob-operator是非递归的。 要启用这里设置,请发出问题

 
shopt -s globstar

 

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

对于所有使用 Windows的人:

在 Windows 下计算代码行的一些问题之后,我发现 cloc

sloccount 相同,但在 Windows 上完美地工作。

用法和输出示例:


$ cloc --exclude-lang=DTD,Lua,make,Python. 
 2570 text files.
 2200 unique files. 
 8654 files ignored.

http://cloc.sourceforge.net v 1.53 T=8.0 s (202.4 files/s, 99198.6 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Javascript 1506 77848 212000 366495
CSS 56 9671 20147 87695
HTML 51 1409 151 7480
XML 6 3088 1383 6222
-------------------------------------------------------------------------------
SUM: 1619 92016 233681 467892
-------------------------------------------------------------------------------

在 Ubuntu respositories上有一个名为 cloc的工具,它提供代码 stastics 。

我在代码库中运行了一个随机目录,它说:


 59 text files.
 56 unique files. 
 5 files ignored.

http://cloc.sourceforge.net v 1.53 T=0.5 s (108.0 files/s, 50180.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 36 3060 1431 16359
C/C++ Header 16 689 393 3032
make 1 17 9 54
Teamcenter def 1 10 0 36
-------------------------------------------------------------------------------
SUM: 54 3776 1833 19481
-------------------------------------------------------------------------------

...