如何计算找到的文件的总行数?


10

我正在运行find . -name pattern来查找一些文件,并且我想优雅地获取这些文件中的总行数。

我该如何实现?

Answers:


9

如果您的版本wcfind支持必要的选项:

find . -name pattern -print0 | wc -l --files0-from=-

这将为您提供每个文件的计数以及总数。如果只想要总数:

find . -name pattern -print0 | wc -l --files0-from=- | tail -n 1

find支持该版本的另一个选项:

find . -name pattern -exec cat {} + | wc -l 

2
$ find . -name '*.txt' -exec cat '{}' \; | wc -l

取得每个文件并cat对其进行处理,然后将所有内容通过管道传递wc给行计数模式。

或者,[未测试]奇怪的文件名安全:

$ find . -name '*.txt' -print0 | xargs -0 cat | wc -l

1

不幸的是:

find . -iname "yourpattern" -exec cat '{}' \; |wc -l

插入多余的行。为了获得可靠的行数,您应该执行以下操作:

find . -name "yourpattern" -print0 | xargs -0 wc -l

这样,您就可以正确处理空格,获取每个文件的行数以及总行数,从而更快,更时尚!!!


1
例如:时间找到。-name“ .m” -exec cat'{}'\; | wc -l在4.878s中运行,并返回227847作为行数。但是时间找到了。名称“ .m” -print0 | xargs -0 wc -l在0.769s内运行并返回正确的行数126464。
g24l 2011年

1

另一种简单的查找方法。文件中的行:

wc -l filename

例:

wc -l myfile.txt 


-2
wc -l `find -name filename`

将有效地工作。


…否,如果路径中包含空格或字符会触发glob。
卡米尔Maciorowski

而且,即使它的工作原理,这个报告的行数每一个文件,这是不是一种优雅的方式来获得总(的要求)。
斯科特,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.