为什么在这种情况下使用 xargs 会失败?

xia*_*012 4 command-line pipe xargs

我试图了解的用法xargs并做了以下实验。

ls | xargs | touch
Run Code Online (Sandbox Code Playgroud)

我想刷新当前目录中的文件日期和目录。

虽然有点,因为我可以用更简单的形式来达到同样的效果。

在我看来,xargs从 读取STDIN并将其转换为其他命令的参数(/bin/echo如果未指定命令,则默认情况下)。我误解了什么吗?

它失败了,我想知道为什么。

Bru*_*ger 8

它需要是这样的:

ls | xargs touch
Run Code Online (Sandbox Code Playgroud)

xargs命令touch使用从 stdin 读取的多个字符串运行该命令。在您的情况下,stdin forxargs是来自ls.

你有命令的方式:

ls | xargs | touch
Run Code Online (Sandbox Code Playgroud)

xargs没有针对将从标准输入读取的字符串(文件名)运行的命令。在这种情况下,xargs只需打印每个文件名,并touch在其标准输入中获取文件名列表。但touch不从其标准输入读取,并且由于您没有给它任何参数,它应该打印如下错误消息:

touch: missing file operand
Try `touch --help' for more information.
Run Code Online (Sandbox Code Playgroud)

(你应该在你的问题中提到过)。