一个简单的问题。
命令

cat * | wc -c

不需要xargs,但是命令
ls | xargs echo

需要xargs命令。
能否有人请我更清楚地解释xargs的概念。
谢谢。

最佳答案

简而言之,xargsstdin(标准输入)转换为您指定命令的参数。例如

$ seq 1 3
1
2
3
$ seq 1 3 | xargs echo
1 2 3

如您所见,seq将序列打印到stdout。我们将输出的(|)传送到xargs上的stdinxargsecho作为参数调用stdin,因此我们得到echo 1 2 3

作为el.pescado saidwc接受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/

10-11 22:04
查看更多