我们有一个PHP应用程序,希望统计特定目录及其子目录下的所有代码行。
我们不需要忽视评论,因为我们只是想得到一个粗略的想法。
wc -l *.php
该命令对于给定的目录非常有效,但它忽略了子目录。我想下面的评论可能有用,但它返回了74,这绝对不是这样。。。
find . -name '*.php' | wc -l
重新输入目录中所有文件的正确语法是什么?
我们有一个PHP应用程序,希望统计特定目录及其子目录下的所有代码行。
我们不需要忽视评论,因为我们只是想得到一个粗略的想法。
wc -l *.php
该命令对于给定的目录非常有效,但它忽略了子目录。我想下面的评论可能有用,但它返回了74,这绝对不是这样。。。
find . -name '*.php' | wc -l
重新输入目录中所有文件的正确语法是什么?
当前回答
您可以使用专门为此目的而构建的cloc实用程序。它报告每种语言的行数,以及其中有多少行是注释等。CLOC在Linux、Mac和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
-------------------------------------------------------------------------------
其他回答
至少在OS X上,其他一些答案中列出的find+xarg+wc命令在大型列表中多次打印“总计”,但没有给出完整的总计。我能够使用以下命令获得.c文件的单个总数:
查找-名称'*.c'-print0|xargs-0wc-l|grep-v total|awk'{sum+=$1;}END{print“sum:”sum;}'
使用Z shell(zsh)globs非常简单:
wc -l ./**/*.php
如果您正在使用Bash,则只需升级。绝对没有理由使用Bash。
我还可以添加另一个OS X条目,这个条目使用普通的旧find with exec(我更喜欢使用xargs,因为我在过去看到过使用xarg的非常大的查找结果集的奇怪结果)。
因为这是针对OS X的,所以我还将过滤添加到.h或.m文件中—确保将所有文件复制到最后!
find ./ -type f -name "*.[mh]" -exec wc -l {} \; | sed -e 's/[ ]*//g' | cut -d"." -f1 | paste -sd+ - | bc
您没有指定有多少个文件或所需的输出。
这可能是您想要的:
find . -name '*.php' | xargs wc -l
不同之处:
wc -l `tree -if --noreport | grep -e'\.php$'`
这很好,但您需要在当前文件夹或其子文件夹中至少有一个*.php文件,否则wc会停止。