Skip to main content

示例使用“xargs”命令

1.10Mac OS X如何在命令行编辑、编译和运行C程序 (六月 2025)

1.10Mac OS X如何在命令行编辑、编译和运行C程序 (六月 2025)
Anonim

xargs命令通常用在命令行中,其中一个命令的输出作为另一个命令的输入参数传递。

在许多情况下,由于“管道”和“重定向”运算符执行相同类型的事务,因此不需要诸如xargs之类的特殊命令来完成该操作。但是,有时基本管道和重定向机制存在问题,例如,如果参数包含空格,则xargs克服了这些问题。

此外,如有必要,xargs会重复执行指定的命令,以处理给定的所有参数。实际上,您可以指定每次xargs执行指定命令时应从标准输入流中读取多少个参数。

通常,如果要将一个命令的输出用作流数据的第二个命令的选项或参数的一部分(使用管道运算符“|”),则应使用xargs命令。如果数据是第二个命令的(标准)输入,则定期管道就足够了。

例如,如果使用ls命令生成文件名和目录列表,然后将此列表传递给执行echo的xargs命令,则可以指定每次迭代时echo处理的文件名或目录名的数量,如下所示:

ls | xargs -n 5 echo

在这种情况下,echo一次接收五个文件或目录名称。由于echo在末尾添加了一个换行符,因此每行写入五个名称。

如果执行一个命令,该命令返回传递给另一个命令以进行进一步处理的大且不可预测的数字项(例如文件名),则最好控制第二个命令接收的最大参数数,以避免过载和崩溃。

以下命令行在传递给cp命令之前对通过查找200的组生成的文件名流进行分区,cp命令将它们复制到 备用 目录。

find ./ -type f -name“* .txt”-print | xargs -l200 -i cp -f {} ./backup

find命令中的“./”元素指定要搜索的当前目录。 “-type f”参数将搜索限制为文件,“ - name”* .txt“标志进一步过滤掉任何没有”.txt“扩展名的内容。 -一世 在xargs中的标志信号表示 {} 符号表示蒸汽的每个文件名。

以下命令在目录/ tmp中或下面查找名为core的文件并删除它们。

find / tmp -name core -type f -print | xargs / bin / rm -f

请注意,如果有任何包含换行符,单引号或双引号或空格的文件名,则此操作将无法正常工作。以下版本以这样的方式处理文件名,即正确处理包含单引号或双引号,空格或换行符的文件或目录名称。

find / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

而不是 -一世 选项你也可以使用 -一世 flag,它指定由命令参数中的输入行替换的字符串,如下例所示:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

替换字符串定义为“{}”。这意味着,命令参数中出现的任何“{}”都会被通过管道操作转发到args的输入元素所取代。这使您可以将输入元素放置在要(重复)执行的命令的参数中的特定位置。