我们有一个PHP应用程序,希望统计特定目录及其子目录下的所有代码行。
我们不需要忽视评论,因为我们只是想得到一个粗略的想法。
wc -l *.php
该命令对于给定的目录非常有效,但它忽略了子目录。我想下面的评论可能有用,但它返回了74,这绝对不是这样。。。
find . -name '*.php' | wc -l
重新输入目录中所有文件的正确语法是什么?
我们有一个PHP应用程序,希望统计特定目录及其子目录下的所有代码行。
我们不需要忽视评论,因为我们只是想得到一个粗略的想法。
wc -l *.php
该命令对于给定的目录非常有效,但它忽略了子目录。我想下面的评论可能有用,但它返回了74,这绝对不是这样。。。
find . -name '*.php' | wc -l
重新输入目录中所有文件的正确语法是什么?
当前回答
WC-L?最好使用GREP-C^
wc-l?错误的
wc命令计算新行代码,而不是行!当文件中的最后一行没有以新的行代码结尾时,这将不会被计算在内!
如果仍然需要计数行,请使用grep-c^。完整示例:
# This example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
# You see, use 'grep' instead of 'wc'! for properly counting
count=$(grep -c ^ < "$FILE")
echo "$FILE has $count lines"
let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED: $total
最后,注意wc-l陷阱(计数进入,而不是行!!!)
其他回答
首先更改要知道行数的目录。
例如,如果我想知道一个名为sample的目录的所有文件中的行数,请给出$cd示例。
然后尝试命令$wc-l*。这将返回每个文件的行数以及结尾处整个目录中的行总数。
非常简单:
find /path -type f -name "*.php" | while read FILE
do
count=$(wc -l < $FILE)
echo "$FILE has $count lines"
done
您没有指定有多少个文件或所需的输出。
这可能是您想要的:
find . -name '*.php' | xargs wc -l
对于另一个衬垫:
( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l
它处理带有空格的名称,只输出一个数字。
在类Unix系统上,有一个叫做cloc的工具,它提供代码统计信息。
我在我们的代码库中的一个随机目录中运行,它显示:
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
-------------------------------------------------------------------------------