如何使用或运算符递归计算目录中的所有代码行以包含多种文件类型
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 文件。我想递归地计算包括javascript、html、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】:
这是一个单行。它使用find
regex
选项来查找匹配的扩展名,并使用wc
--files0-from=-
参数从标准输入中获取文件列表
find -regex '.*\(php\|js\|css\|html?\)' -printf '%p\0' |wc -l --files0-from=-
【讨论】:
以上是关于如何使用或运算符递归计算目录中的所有代码行以包含多种文件类型的主要内容,如果未能解决你的问题,请参考以下文章