如何使用或运算符递归计算目录中的所有代码行以包含多种文件类型

Posted

技术标签:

【中文标题】如何使用或运算符递归计算目录中的所有代码行以包含多种文件类型【英文标题】:How to count all the lines of code in a directory recursively using or operator to include several file types 【发布时间】:2016-11-20 11:44:36 【问题描述】:

我正在阅读这个答案:How to count all the lines of code in a directory recursively?

但它只适用于 php 文件。我想递归地计算包括javascripthtml、css和php文件在内的代码组合行数。

我试过这个find . -name '*.php' |'*.js' | xargs wc -l

但它不起作用。

注意:我使用的是 OS X El Capitan。

【问题讨论】:

【参考方案1】:

避免使用xargs

find \( -name '*.php' -o -name '*.js' -o -name '*.html' \) -exec wc -l  +
\( \) 分组以便所有结果都给wc 命令 在\( \) 中添加所需数量的-o -name 使用iname 而不是name 来忽略文件名的大小写 默认情况下,find 适用于当前目录

参考:

https://unix.stackexchange.com/questions/12902/how-to-run-find-exec https://unix.stackexchange.com/questions/24954/when-is-xargs-needed https://unix.stackexchange.com/questions/131766/why-does-my-shell-script-choke-on-whitespace-or-other-special-characters/131767#131767

【讨论】:

您可能希望在 * 和每个实例的文件扩展名之间添加一个点。【参考方案2】:

试一试:

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

包含文件:

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

不包括某些路径:

find . -name "*.php" -not -path "./tests*" | xargs wc -l

【讨论】:

谢谢。如果我想包含 html 和 css 文件怎么办? -o 是 or 运算符吗? @RobertRocha 是的,只要包含-o -name,只要您需要搜索更多文件。【参考方案3】:

这是一个单行。它使用findregex 选项来查找匹配的扩展名,并使用wc --files0-from=- 参数从标准输入中获取文件列表

find -regex '.*\(php\|js\|css\|html?\)' -printf '%p\0' |wc -l --files0-from=-

【讨论】:

以上是关于如何使用或运算符递归计算目录中的所有代码行以包含多种文件类型的主要内容,如果未能解决你的问题,请参考以下文章

如何递归计算目录中的单词数?

如何在不使用递归或`/`运算符的情况下进行除法?

Python2.7 - 将参数传递给命令行以根据参数过滤CSV

如何迭代数据框中的行以检测不同的单词并将其保存在新列中?

如何使用递归遍历大纲中的所有孩子?

递归目录树并使用pdf阅读器计算所有pdf文件中的页面