我试图使用sed根据特定扩展计算所有行.
find -name '*.m' -exec wc -l {} \; | sed ...
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行以下操作,如何在此特定行中包含sed以获取总计.
Emm*_*NAT 48
你也可以从wc获得漂亮的格式:
wc `find -name '*.m'`
Run Code Online (Sandbox Code Playgroud)
Dan*_*mes 13
这里的大多数答案对大量文件都不适用.如果文件名列表对于单个命令行调用来说太长,则某些文件名会中断,而其他文件名效率低,因为-exec
为每个文件启动一个新进程.我相信一个强大而有效的解决方案是:
find . -type f -name "*.m" -print0 | xargs -0 cat | wc -l
Run Code Online (Sandbox Code Playgroud)
使用cat
这种方式很好,因为它的输出直接输入,wc
所以只有少量文件的内容一次保存在内存中.如果单个调用的文件太多cat
,cat
将多次调用,但所有输出仍将通过管道传输到单个wc
进程中.
您可以cat
通过单个wc
实例获取所有文件以获取总行数:
find . -name '*.m' -exec cat {} \; | wc -l
Run Code Online (Sandbox Code Playgroud)
在现代GNU平台上,wc并从参数中找到-print0和-files0-这些参数可以组合成一个命令,该命令用于计算文件中行总数的行.例:
find . -name '*.c' -type f -print0 | wc -l --files0-from=-
Run Code Online (Sandbox Code Playgroud)