一个简单的问题。
命令
cat * | wc -c
不需要xargs,但是命令
ls | xargs echo
需要xargs命令。
能否有人请我更清楚地解释xargs的概念。
谢谢。
最佳答案
简而言之,xargs
将stdin
(标准输入)转换为您指定命令的参数。例如
$ seq 1 3
1
2
3
$ seq 1 3 | xargs echo
1 2 3
如您所见,
seq
将序列打印到stdout
。我们将输出的(|
)传送到xargs
上的stdin
。 xargs
以echo
作为参数调用stdin
,因此我们得到echo 1 2 3
。作为el.pescado said,
wc
接受stdin
上的输入(您也可以为其提供文件参数)。由于cat
将文件打印为stdout
,因此您可以将其直接通过管道传输到wc
。$ cat text
This is only
a test
$ cat text | wc
2 5 20
$ wc text
2 5 20 text
echo
不接受stdin
的任何内容。这将很奇怪,因为echo
的工作是将其打印为stdout
-您已经可以打印任何要通过管道传输的内容。因此,您可以使用xargs
将流转换为参数。echo
命令可能太琐碎,看不到正在发生的事情,因此这是一个更真实的示例。假设我们有一个包含一些文件的目录:$ ls
bar1 foo1 foo2 foo3 foo4 foo5 foo6
到目前为止,我们已经使用
foo
了,我们想要删除所有它们,但是我们不必打扰键入rm foo1 foo2 ...
。毕竟,我们是程序员,而且我们很懒。我们能做的是...$ ls foo* | xargs rm
$ ls
bar1
rm
需要参数,ls foo*
打印我们要删除的每个文件,xargs
进行翻译。附带说明一下,有时您希望将
stdin
分成较小的部分。 xargs -n
为此非常有用,并且一次将N个参数传递给您的最终命令。$ ls foo* | xargs -n2 echo
foo1 foo2
foo3 foo4
foo5 foo6
关于linux - Linux xargs命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32972377/