在这种情况下 xargs 到底做什么?

在这种情况下 xargs 到底做什么?

我最近遇到了以下两个例子

示例 1:仅列出目录

ls -l | grep "^d"

示例 2:在文件内搜索

   ls | xargs grep -i "Find Some String"

现在我已经读过了这里

如果您只是使用管道,它会在 STDIN(标准输入流)上接收数据作为原始数据堆,并且可以一次对一行进行排序。

所以现在我有点困惑,为什么 grep 在第二个例子中需要 xargs,而在第一个例子中不需要。据我目前的理解,xargs 用于转换为stdinarguments(因为有些程序需要参数而不是 stdin)。这是否意味着 grep 可以同时接受 stdin 和参数?如果有人能解释为什么在第二个例子中使用 xargs,我将不胜感激,为什么没有 xargs 它就不能工作?它有什么用途?

答案1

在示例 2 中,您要在 中搜索某个文本file contents,因此您需要 xargs 将文件名传递给 grep。
在示例 1 中,您要搜索 ls 的输出,而不是文件内容。

实际上,不使用 xargs 也可以搜索文件内容,这样更好:

grep -i 'some text' *

相关内容