如何在 Linux 上使用 xargs
xargs 是一个命令行工具。如果您想将一个命令的输出重定向为另一个命令的参数,那么 xargs 就是适合您的工具。它是一个非常有用的工具,可以轻松地在命令行上完成很多事情。在本文中,我将向您展示如何在 Linux 上使用 xargs。那么,让我们开始吧。
xargs 的工作原理:
使用 xargs 命令的格式是:
您还可以使用一些选项修改 xargs 的行为。在这种情况下,xargs 命令的格式将是:
这里,command1 的输出将用作command2 的参数。 command1 的输出被 xargs 分解为许多参数,具体取决于称为分隔符的字符。然后,xargs 对每个参数运行命令 command2,并且该参数作为命令 command2 的参数传递。
例如,command1的输出如下:
假设分隔符是空格。现在,command1 的输出将分为 3 个参数:value1、value2 和 value3。
现在,xargs 为 3 个参数中的每一个运行命令 command2 一次。
$ command2 value2
$ command2 value3
这里,value1、value2 和 value3 是 xargs 从命令 command1 的输出中解析的参数。
您可以在 shell 脚本中使用循环来达到相同的效果。但 xargs 只是一种无需循环即可完成操作的更简单方法,尤其是在命令行上。
默认情况下,xargs 的分隔符是换行符/空格符。但是您可以使用 xargs 的 -d 或 –delimiter 选项更改分隔符。
默认情况下,xargs 一次只处理一个参数。如果您想使用命令 command1 输出中的多个参数来运行命令 command2,则可以使用 -n 或 -n >–max-args xargs 选项。有时,您必须使用 -n 或 –max-args 选项专门告诉 xargs 一次使用一个参数。
您还可以使用 xargs 的 -I 选项将其他字符串附加或添加到传递给命令 command2 的参数中。
xargs 还有很多其他选项,但这 3 个是最重要和最有用的。因此,我将在本文中仅介绍这 3 个 xargs 参数。
废话已经够多了。让我们来看一些例子。
示例 1:创建和删除文本文件中列出的文件
假设您在文本文件 files.txt 中有一个文件名列表。
您可以看到文本文件 files.txt 的内容,如下面的屏幕截图所示。
现在,您可以使用带有 xargs 的 touch 命令创建 files.txt 文本文件中列出的所有文件,如下所示:
如您所见,文件是按照 files.txt 中列出的方式创建的。
现在,假设您要删除 files.txt 文本文件中列出的文件。您可以将 rm 命令与 xargs 一起使用,如下所示:
仅删除 files.txt 文件中列出的文件,如下面的屏幕截图所示。
这是 xargs 的一个非常简单的示例。
示例 2:将 STDOUT 重定向到不支持管道的命令
如果命令 command2 支持 Linux 管道,您可以将命令 command1 的 STDOUT 重定向为另一个命令 command2 的 STDIN。但如果该命令不支持管道,您将无法执行此操作。
例如,echo命令不支持管道。因此,以下命令不会打印任何内容,如下面的屏幕截图所示。
xargs 命令可以帮助您将 command1 的 STDOUT(在本例中为 date)重定向到 command2 的 STDIN(在本例中为 echo),如下面的屏幕截图所示。
示例 3:更改 xargs 的分隔符
在这里,我使用 xargs 打印了一个字符串 123-456-7890 (一个虚拟电话号码)。如您所见,整个输出被视为单个参数,并且 xargs 仅运行 echo 命令一次。
在这里,我使用 xargs 的 -d 选项将分隔符更改为 –。如您所见,输出 123-456-7890 现在被视为 3 个不同的参数 123、456 和 7890 。
示例 4:附加或前置 xargs 参数
您可以使用 xargs 将字符串附加(添加到参数末尾)或前置(添加到参数前面)字符串到传递给命令 command2 的参数。在向您展示如何执行此操作之前,我将向您展示如何使用 xargs 的 -I 选项。
xargs 的 -I 选项允许您为传递给命令 command2 的 xargs 参数定义符号。它的工作原理就像一个变量。
例如,
此处,-I 选项将 {} 定义为 xargs 当前正在处理的参数的符号。定义符号 {} 后,即可使用该符号将参数传递给命令 command2,该命令(符号 {})将被参数的值替换。
现在,要将字符串 .txt (比方说)附加到每个参数,您可以使用 xargs,如下所示:
同样,您可以在每个参数前面添加字符串 hello (比方说),如下所示:
示例 5:更改特定文件的扩展名
这个有点棘手。但我会解释它是如何工作的。不用担心。
假设您当前的工作目录中有一些具有不同文件扩展名的文件。现在,您想将它们全部更改为 png 扩展名。
您可以使用 xargs 将当前工作目录中所有文件的文件扩展名更改为 png,如下所示:
可以看到,所有的文件扩展名都变成了png。
此处,xargs 启动 bash 子 shell 并运行 bash 命令
首先,FILE={}将符号{}值分配给FILE shell变量,该值是文件名(xargs的参数值) 。
然后,使用mv命令更改文件扩展名。
$FILE shell 变量包含原始文件名。
$ {FILE%%.*} 删除文件名的扩展名(包括 . 字符),然后将 .png 字符串附加到删除的文件名中。
xargs 可以做很多更复杂的事情。继续使用 xargs 尝试新事物。天空是你的极限。
如果您需要有关 xargs 的任何帮助,可以查看 xargs 的手册页,如下所示:
这就是在 Linux 上使用 xargs 的方式。感谢您阅读本文。