假设我要计算项目中的代码行数。如果所有文件都在同一目录中,则可以执行:
cat * | wc -l
但是,如果有子目录,则无法使用。为此,cat必须具有递归模式。我怀疑这可能是xargs的工作,但我想知道是否还有更优雅的解决方案?
首先,您不需要使用cat
行数。这是一种称为猫的无用使用(UUoC)的反模式。要计算当前目录中文件的行数,请使用wc
:
wc -l *
然后,该find
命令递归子目录:
find . -name "*.c" -exec wc -l {} \;
.
是要从中开始搜索的顶级目录的名称
-name "*.c"
是您感兴趣的文件的模式
-exec
给出要执行的命令
{}
是find命令传递到命令的结果(在此处wc-l
)
\;
指示命令结束
此命令生成所有找到的文件的列表及其行数,如果要获得所有找到的文件的总和,可以使用find列出文件(带有-print
选项),然后使用xargs将该列表作为参数传递去WC-L。
find . -name "*.c" -print | xargs wc -l
编辑以解决Robert Gamble的评论(谢谢):如果文件名中包含空格或换行符(!),则必须使用-print0
option代替-print
and,xargs -null
以便文件名列表与以空终止的字符串交换。
find . -name "*.c" -print0 | xargs -0 wc -l
Unix的哲学是拥有只做一件事并且做得很好的工具。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句