我们有一个PHP应用程序,希望统计特定目录及其子目录下的所有代码行。

我们不需要忽视评论,因为我们只是想得到一个粗略的想法。

wc -l *.php 

该命令对于给定的目录非常有效,但它忽略了子目录。我想下面的评论可能有用,但它返回了74,这绝对不是这样。。。

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

重新输入目录中所有文件的正确语法是什么?


当前回答

一个简单的方法将很快,将使用find的所有搜索/过滤功能,当文件太多时不会失败(数字参数溢出),可以很好地处理名称中带有有趣符号的文件,而不使用xargs,并且不会启动大量无用的外部命令(感谢find的-exec)。干得好:

find . -name '*.php' -type f -exec cat -- {} + | wc -l

其他回答

首先给出最长的文件(即,也许这些长文件需要一些重构?),并排除一些供应商目录:

 find . -name '*.php' | xargs wc -l | sort -nr | egrep -v "libs|tmp|tests|vendor" | less
cat \`find . -name "*.php"\` | wc -l

我的Windows系统上安装了BusyBox。这就是我所做的。

ECHO OFF
for /r %%G in (*.php) do (
busybox grep . "%%G" | busybox wc -l
)

如果您希望结果按行数排序,只需在第一个答案中添加|sort或|sort-r(-r表示降序),如下所示:

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

如果文件太多,最好只查找总行数。

find . -name '*.php' | xargs wc -l | grep -i ' total' | awk '{print $1}'