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

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

wc -l *.php 

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

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

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


当前回答

我还可以添加另一个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

其他回答

您需要一个简单的for循环:

total_count=0
for file in $(find . -name *.php -print)
do
    count=$(wc -l $file)
    let total_count+=count
done
echo "$total_count"
cat \`find . -name "*.php"\` | wc -l

仅适用于来源:

wc `find`

要过滤,只需使用grep:

wc `find | grep .php$`

对于我来说,更常见和简单的是,假设您需要计算不同扩展名的文件(例如,也是本地文件):

wc $(find . -type f | egrep "\.(h|c|cpp|php|cc)" )

我想检查多个文件类型,并懒得手动计算总数。所以我现在用这个来一次性得到总数。

find . -name '*.js' -or -name '*.php' | xargs wc -l | grep 'total'  | awk '{ SUM += $1; print $1} END { print "Total text lines in PHP and JS",SUM }'

7935115318PHP和JS中的文本行总数94669

这允许您链接多个想要过滤的扩展类型。只需将它们添加到-name“*.js”-或-name“*.php”部分,并可能根据您的喜好修改otuput消息。