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

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

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

ls | xargs | touch

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

虽然是有一点愚蠢的,因为我可以使用更简单的形式来达到相同的效果。

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

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

答案1

它需要是这样的:

ls | xargs touch

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

你的命令方式:

ls | xargs | touch

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

touch: missing file operand
Try `touch --help' for more information.

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

相关内容