一个简单的问题。 命令
cat * | wc -c
不需要xargs,而是命令
ls | xargs echo
需要xargs命令。 可以请有人更清楚地向我解释xargs的概念。 感谢。
答案 0 :(得分:7)
简而言之,xargs
将stdin
(标准输入)转换为您指定的命令的参数。例如
$ seq 1 3
1
2
3
$ seq 1 3 | xargs echo
1 2 3
正如您所见, seq
会将序列打印到stdout
。我们在|
上输出xargs
的输出(stdin
)。 xargs
以[{1}}为参数调用echo
,因此我们得到stdin
。
作为el.pescado said,echo 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
打印其命令行参数。