哪个命令会在命令“ls|xargs wc -l”中添加总数?

3

ls 命令只是打印出目录中的文件,wc -l 命令用于统计特定文件名的行数,xargs 命令将逐个发送 ls 输出到 wc -l 命令中,但最终结果带有总行数,原因是什么?

示例输出:

  14 doc.txt
 230 legion.c
 519 legion_agent.c
  70 legion_manager.c
  52 legion_privilege.c
 236 logic_agent.c
 349 protocol.c
1470 total
2个回答

8

wc将传递给它的所有文件的总行数相加。xargs从输入中收集行,并将它们一次性作为多个参数的一个集合传递给wc,因此您可以得到所有这些文件的总和。

例如,如果我有文件ab,并运行:

wc -l a b

我会得到

 28 a
 17 b
 45 total

同样的,如果我们使用(echo a; echo b;)模拟ls的输出,并加上xargs,我们将得到相同的输出结果:
(echo a; echo b;) | xargs wc -l

输出:

 28 a
 17 b
 45 total

如果我们添加echo:
(echo a; echo b;) | xargs echo wc -l

输出:

wc -l a b

2
xargs 还会在文件名参数列表超过 ARG_MAX 时对其进行拆分,这种情况下您将获得多个 wc 调用以及多个(子)total 行。 - tripleee
1
ж„ҹи°ў@konsoleboxпјҢжҲ‘иҜҜи§ЈдәҶxargsзҡ„е·ҘдҪңжЁЎејҸгҖӮжҲ‘д»ҘдёәxargsдјҡеңЁlsзҡ„жҜҸдёӘиҫ“еҮәиЎҢдёҠи§ҰеҸ‘wc -lгҖӮеҪ“еҸӘжҸҗдҫӣдёҖдёӘеҸӮж•°ж—¶пјҢwc -lжІЎжңүжҳҫзӨәжҖ»иЎҢж•°гҖӮ - spin6lock

0

尝试这行代码,看看它是否给你想要的结果:

grep -c '.*' *.*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接