gpt4 book ai didi

bash - 管道时何时使用 xargs?

转载 作者:行者123 更新时间:2023-11-29 08:54:52 26 4
gpt4 key购买 nike

我是 bash 的新手,我正在尝试了解 xargs 的用法,这对我来说仍然不是很清楚。例如:

history | grep ls

在这里,我正在我的历史记录中搜索命令 ls。在此命令中,我没有使用 xargs,它运行良好。

find /etc - name "*.txt" | xargs ls -l

我是这个,我不得不使用 xargs 但我仍然无法理解其中的区别,我无法正确决定何时使用 xargs 以及何时不使用。

最佳答案

xargs 可以在您需要从一个命令获取输出并将其用作另一个命令的参数时使用。在您的第一个示例中, grep 从标准输入中获取数据,而不是作为参数。因此,不需要 xargs

xargs 从标准输入中获取数据并执行命令。默认情况下,数据作为参数附加到命令的末尾。但是,它可以插入任何地方,使用占位符作为输入。传统的占位符是 {};使用它,您的示例命令可能会写成:

find /etc -name "*.txt" | xargs -I {} ls -l {}

如果您在 /etc 中有 3 个文本文件,您将获得每个文件的完整目录列表。当然,您可以轻松编写 ls -l/etc/*.txt 并省去麻烦。

另一个示例让您重命名这些文件,并要求占位符 {} 使用两次。

find /etc -name "*.txt" | xargs -I {} mv {} {}.bak

这些都是不好的例子,一旦你有一个包含空格的文件名就会崩溃。您可以通过告诉 find 用空字符分隔文件名来解决这个问题。

find /etc -print0 -name "*.txt" | xargs -I {} -0 mv {} {}.bak

我个人的看法是,除了使用 xargs 几乎总是有其他选择(例如 find-exec 参数),您将通过学习这些知识可以得到更好的服务。

关于bash - 管道时何时使用 xargs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35589179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com