有关如何在 Linux 上使用 xargs 命令的示例
xargs Linux 命令允许用户从标准输入执行命令行。如果这听起来令人困惑,那么看一个基本示例可能会更容易。以下命令将使用 xargs
来 cat
由 ls
命令列出的所有文件。
$ ls
1.txt 2.txt 3.txt
$ ls | xargs cat
this is file1
this is file2
this is file3
在上面的命令中,我们将 ls 命令的输出通过管道传输到 xargs,并使用 cat 命令列出三个文件中每个文件的内容。 xargs 的大多数用途都涉及从不同的命令通过管道传输到它,并利用它连续执行另一个命令。如果您想从其他基本示例开始,请查看我们的 xargs 初学者指南或多线程 xargs 示例。
在本指南中,我们将介绍 xargs 命令的各种命令行示例,以便您可以了解如何在 Linux 系统上有效地使用它。请跟随我们了解 xargs 命令的基础知识和更复杂的方面。
在本教程中您将学习:
如何在 Linux 上使用 xargs 命令,通过示例
Linux 上的各种 xargs 命令示例
xargs 命令示例
请按照下面的示例了解如何在 Linux 上的各种场景中使用 xargs。
让我们回到原来的示例,准确解释执行 xargs 命令时发生的情况。现在我们有三个文本文件,目标是使用
cat
命令查看所有三个文件的内容。由于这是当前目录中仅有的三个文件,我们可以使用 ls 命令来检索文件名,然后使用将这些名称传递给 cat xargs
。$ ls | xargs cat this is file1 this is file2 this is file3
这里真正发生的事情相当于以下命令:
$ cat 1.txt 2.txt 3.txt
要查看 xargs 正在执行的命令,可以使用
-t
选项。这仍然会执行该命令,但它为我们提供了一种方式来查看最终命令的实际格式。$ ls | xargs -t cat cat 1.txt 2.txt 3.txt this is file1 this is file2 this is file3
我们还可以使用
-p
选项,它会在执行命令之前要求我们确认。这很方便使用,例如,在使用 xargs 执行 rm 命令时,因为您不想意外删除任何文件。您可以输入y
(是)确认运行命令,或输入n
(否)中止命令。$ ls | xargs -p rm rm 1.txt 2.txt 3.txt ?...y
在前面的示例中,xargs 正在执行
cat 1.txt 2.txt 3.txt
。换句话说,它只执行一个命令,并且所有文件名都被附加。我们可以使用-n
(最大参数)选项让 xargs 单独运行每个cat
命令。在下面的示例中,我们还包含了-t
选项,因此我们可以看到该命令如何单独执行cat
三次,而不是只执行一次。$ ls | xargs -t -n 1 cat cat 1.txt this is file1 cat 2.txt this is file2 cat 3.txt this is file3
在本例中,
-n 1
选项告诉 xargs 它一次只能使用一个文件名(最多)。如果我们使用-n 2
来代替,会有什么不同。$ ls | xargs -t -n 2 cat cat 1.txt 2.txt this is file1 this is file2 cat 3.txt this is file3
如果使用
-I
选项,xargs 还可以运行多个命令。您需要指定一个“替换字符串”来与此选项一起使用。一种非常常见的用法是百分号,我们在下面使用它。举一个简单的例子,以下命令将在我们的三个文件上执行touch
,然后执行cat
,这三个文件的名称从ls
传递到 xargs。$ ls | xargs -t -I % sh -c '{ touch %; cat %; }' sh -c '{ touch 1.txt; cat 1.txt; }' this is file1 sh -c '{ touch 2.txt; cat 2.txt; }' this is file2 sh -c '{ touch 3.txt; cat 3.txt; }' this is file3
xargs 的另一个方便用途是它能够接受来自文件的输入。这是通过
-a
选项完成的。以以下命令为例,我们将文件名列表传递给 xargs,然后cat
这些文件。$ xargs -t -a files.txt cat cat 1.txt 2.txt 3.txt this is file1 this is file2 this is file3
您可能会猜到,
file.txt
的内容如下所示:1.txt 2.txt 3.txt
xargs 最常见的用途之一是与
find
命令结合使用。find
已经包含-exec
选项,因此它能够对找到的任何文件执行命令,但 xargs 效率更高。在 find 命令中,您应该添加-print0
选项,以便在每个文件名后打印一个额外的空字符。您还需要在xargs
命令中包含相应的-0
选项。下面是一个示例,我们搜索 .txt 文件并对每个文件运行cat
。我们将再次附加 -t 选项来查看命令 xargs 最终运行。$ find . -name "*.txt" -print0 | xargs -t -0 cat cat ./3.txt ./2.txt ./1.txt this is file3 this is file2 this is file1
这些示例应该足以帮助您充分利用 xargs 命令。您可以使用该命令执行很多操作,并且在许多不同的场景中它都可以派上用场。如果您想了解更多信息,建议查看手册页以获取更多使用示例。
$ man xargs
结束语
在本指南中,我们通过各种示例了解了如何在 Linux 上使用 xargs 命令。我们将它与多个其他命令结合起来,并且还学习了如何使用它来读取文件的内容。 xargs 命令具有无限不同的应用程序,并被证明是 Linux 命令行上最通用的工具之一。