xargs.1

XARGS(1)

XARGS(1)

FreeBSD General Commands Manual

XARGS(1)

xargs

构造参数列表并执行实用程序

xargs [-0oprt] [-E eofstr] [-I replstr [-R replacements] [-S replsize]] [-J replstr] [-L number] [-n number [-x]] [-P maxprocs] [-s size] [utility [argument ...]]

xargs 实用程序从标准输入读取空格、制表符、换行符和文件结尾分隔的字符串,并以字符串作为参数执行 utility 。

命令行上指定的任何参数都会在每次调用时提供给 utility ,然后是从 xargs 的标准输入中读取的一些参数。 重复此操作,直到标准输入用尽。

空格、制表符和换行符可以使用单引号 (`` ' '') 或双引号 (``"'') 或反斜杠 (``\'') 嵌入到参数中。单引号转义所有非单引号字符,不包括换行符,直到匹配的单引号。 双引号转义所有非双引号字符,不包括换行符,直到匹配的双引号。 任何单个字符,包括换行符,都可以用反斜杠转义。

选项如下:

-0, --null

更改 xargs 以期望 NUL (``\0'') 字符作为分隔符,而不是空格和换行符。 预计这将与 find(1) 中的 -print0 函数一起使用。

-E eofstr

使用 eofstr 作为逻辑 EOF 标记。

-I replstr

为每个输入行执行 utility ,用整行输入 replacements utility 的一个或多个 replstr 实例(如果没有指定 -R 标志,则最多替换 5 个)参数。 替换完成后,生成的参数将不允许超过 replsize (如果未指定 -S 标志,则为 255)字节;这是通过将尽可能多的包含 replstr 的参数连接到 utility 的构造参数来实现的,最多为 replsize 个字节。 大小限制不适用于不包含 replstr 的 utility 参数,此外,不会对 utility 本身进行替换。 暗示 -x

-J replstr

如果指定了此选项, xargs 将使用从标准输入读取的数据来替换第一次出现的 replstr ,而不是在所有其他参数之后附加该数据。 此选项不会影响将从输入中读取的参数数量 (-n), 或者 xargs 将生成的命令的大小 (-s) 。 该选项只是移动这些参数将被放置在执行的命令中的位置。 replstr 必须显示为 xargs 的不同 argument 。 例如,如果它位于带引号的字符串的中间,则不会被识别。 此外,只会替换第一次出现的 replstr 。 例如,以下命令会将当前目录中以大写字母开头的文件和目录列表复制到 destdir:

/bin/ls -1d [A-Z]* | xargs -J % cp -Rp % destdir

-L number

为读取的每个 number 行调用 utility 。 如果到达 EOF 并且读取的行数少于 number ,则将使用可用行调用 utility 。

-n number, --max-args=number

设置每次调用 utility 时从标准输入获取的参数的最大数量。 如果累计的字节数(参见 -s 选项)超过了指定的 size ,或者对于 utility 的最后一次调用剩下的参数数少于 number , utility 的调用将使用少于 number 的标准输入参数。 number 的当前默认值为 5000。

-o

在执行命令之前,在子进程中将 stdin 作为 /dev/tty 重新打开。 如果您希望 xargs 运行交互式应用程序,这将很有用。

-P maxprocs, --max-procs=maxprocs

并行模式:一次最多运行 maxprocs 次 utility 调用。 如果 maxprocs 设置为 0, xargs 将运行尽可能多的进程。

-p, --interactive

回显每个要执行的命令并询问用户是否应该执行。 POSIX 语言环境中的肯定响应 ‘y’ 会导致命令被执行,任何其他响应都会导致它被跳过。 如果进程未连接到终端,则不会执行任何命令。

-r, --no-run-if-empty

与 GNU xargs 的兼容性。 GNU 版本的 xargs 至少运行一次 utility 参数,即使 xargs 输入为空,它也支持 -r 选项来禁止此行为。 FreeBSD 版本的 xargs 不会在空输入上运行 utility 参数,但它支持 -r 选项以实现与 GNU xargs 的命令行兼容性,但 -r 选项在 FreeBSD 版本的 xargs 中没有任何作用。

-R replacements

指定 -I 用于替换的最大参数数量。如果 replacements 为负数,则要替换的参数数是无限的。

-S replsize

指定 -I 可用于替换的空间量(以字节为单位)。 replsize 的默认值为 255。

-s size, --max-chars=size

设置提供给 utility 的命令行长度的最大字节数。 实用程序名称的长度、传递给 utility 的参数(包括 NULL 终止符)和当前环境的总和将小于或等于此数字。 size 的当前默认值为 ARG_MAX - 4096。

-t, --verbose

在执行之前立即将要执行的命令回显到标准错误。

-x, --exit

如果包含 number 参数的命令行不适合指定(或默认)的命令行长度,则强制 xargs 立即终止。

如果 utility 被省略,则使用 echo(1) 。

如果 utility 从标准输入读取,可能会发生未定义的行为。

如果无法组装或无法调用命令行,或者如果 utility 的调用被信号终止,或者 utility 的调用以 255 的值退出,则 xargs 实用程序将停止处理输入并在所有 utility 调用后退出完成加工。

如果没有发生错误, xargs 实用程序会以 0 值退出。 如果找不到 utility ,则 xargs 以值 127 退出,否则如果无法执行 utility ,则 xargs 以值 126 退出。 如果发生任何其他错误,则 xargs 以值 1 退出。

创建一个数字从 1 到 9 的 3x3 矩阵。每个 echo(1) 实例接收三行作为参数:

$ seq 1 9 | xargs -L3 echo 1 2 3 4 5 6 7 8 9

复制标准输入的每一行:

$ echo -e "one\ntwo\nthree" | xargs -I % echo % % one one two two three three

使用标准输入中的目录之一执行最多 2 个 find(1) 并发实例:

echo -e "/usr/ports\n/etc\n/usr/local" | xargs -J % -P2 -n1 find % -name file

echo(1), find(1), execvp(3)

xargs 实用程序应符合 IEEE Std 1003.2 (“POSIX.2”) 标准。 -J, -o, -P, -R-S 选项是非标准的 FreeBSD 扩展,在其他操作系统上可能不可用。

xargs 实用程序出现在 PWB UNIX 中。

如果 utility 尝试调用另一个命令以增加参数数量或环境大小,则可能会导致 execvp(3) 因 E2BIG 失败。

xargs 实用程序在对 -I-J 选项执行字符串比较时不考虑多字节字符,这可能会导致某些语言环境中的结果不正确。

September 21, 2020

FreeBSD 13.1-RELEASE

最后更新于

FreeBSD 中文社区