Linux xargs命令

时间:2015-10-06 14:20:37

标签: linux xargs

一个简单的问题。 命令

cat * | wc -c

不需要xargs,而是命令

ls | xargs echo

需要xargs命令。 可以请有人更清楚地向我解释xargs的概念。 感谢。

2 个答案:

答案 0 :(得分:7)

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

$ seq 1 3
1
2
3
$ seq 1 3 | xargs echo
1 2 3
正如您所见,

seq会将序列打印到stdout。我们在|上输出xargs的输出(stdin)。 xargs以[{1}}为参数调用echo,因此我们得到stdin

作为el.pescado saidecho 1 2 3接受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对此非常有用,并且一次将N个参数传递给最终命令。

xargs -n

答案 1 :(得分:1)

wc标准输入中读取数据,而echo打印其命令行参数