“xargs”命令的示例用法

描述和介绍

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

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

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

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

例如,如果使用ls命令生成文件名和目录列表,然后将此列表通过管道传递给执行echo的xargs命令,那么可以指定echo在每次迭代中处理多少个文件名或目录名,如下所示:

ls | xargs -n 5回声

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

如果您执行的命令返回大量不可预知的数字项目(例如文件名称),并将其传递给另一个命令以供进一步处理,那么控制第二个命令接收的最大参数数量以避免过载和崩溃是一个好主意。

以下命令行将查找 int产生的文件名流分割为200个组,然后传递给cp命令, cp命令将它们复制到备份目录。

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

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

以下命令在/ 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

除了-i选项,您还可以使用-I标志来指定在命令参数中由输入行替换的字符串,如下例所示:

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

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