linux - 如何计算包括子目录在内的代码行数

假设我想计算项目中的代码行数。如果所有文件都在同一个目录中,我可以执行:

cat * | wc -l

但是,如果有子目录,这是行不通的。为此, cat 必须具有递归模式。我怀疑这可能是 xargs 的工作,但我想知道是否有更优雅的解决方案?

最佳答案

首先你不需要使用 cat 来计算行数。这是 antipattern called Useless Use of Cat (UUoC)。要计算当前目录中文件的行数,请使用 wc :

wc -l * 

然后find命令递归子目录:

find . -name "*.c" -exec wc -l {} \;
  • . 是开始搜索的顶级目录的名称

  • -name "*.c" 是你感兴趣的文件的模式

  • -exec 给出要执行的命令

  • {}是find命令的结果要传递给命令(这里是wc-l)

  • \; 表示命令结束

这个命令会生成所有找到的文件及其行数的列表,如果你想得到 all 找到的文件的总和,你可以使用 find 列出文件(使用 -print 选项),然后使用 xargs 将此列表作为参数传递给 wc-l。

find . -name "*.c" -print | xargs wc -l 

编辑以解决 Robert Gamble 评论(谢谢):如果文件名中有空格或换行符 (!),则必须使用 -print0 选项而不是 -printxargs -null 以便文件名列表与以 null 结尾的字符串交换。

find . -name "*.c" -print0 | xargs -0 wc -l

Unix 的哲学是拥有只做一件事的工具,并且把它做好。

https://stackoverflow.com/questions/316590/

相关文章:

http - Wget 将文档和标题输出到 STDOUT

python - 如何在 Python 中将 RGB 图像转换为灰度图像?

linux - 如何删除 "Argument list too long"时超过 3 天的所有文件?

python - 如何在 Xvfb 中运行 Selenium?

python - 为什么 Python 中的 @foo.setter 对我不起作用?

c - Linux内核如何编译自己?

python - 检测和排除 pandas DataFrame 中的异常值

linux - tcpdump:本地主机到本地主机

python - TypeError : sequence item 0: expected str

python - 你如何在已经创建的 virtualenv 中设置你的 pythonpath?