xargs command
名字: xargs-从标准输入构建和执行命令行
语法: xargs [options] [command [initial-arguments]]
选项:
-
-O, --null
输入项目以空字符而不是空格终止,并且引号和反斜杠不是特殊的(每个字符均按字面意义使用)。禁用文件字符串的结尾,该字符串与其他任何参数一样对待。输入项可能包含空格,引号或反斜杠时很有用。
GNU find -print0选项产生适合此模式的输入。 -
-a file, --arg-file=file
从文件而不是标准输入中读取项目。如果使用此选项,则在运行命令时stdin保持不变。否则,stdin从/dev/null重定向。 -
–delimiter=delim, -d delim
输入项目以指定字符终止。指定的分隔符可以是单个字符,C样式字符转义符(例如\n)或八进制或十六进制转义码。八进制和十六进制转义码被理解为printf命令。不支持多字节字符。处理输入时,引号和反斜杠并不特殊;输入中的每个字符均按字面意义使用。-d选项禁用任何文件结尾字符串,该字符串与其他任何参数一样对待。当输入仅由换行符分隔的项目组成时,可以使用此选项,尽管在可能的情况下将程序设计为使用–null几乎总是更好的选择。 -
-E eof-str 将文件字符串的末尾设置为eof-str。如果文件字符串的结尾出现在输入行中,则其余输入将被忽略。如果既不使用-E也不使用-e,则不使用文件字符串结尾。
-
-e[eof-str], --eof[=eof-str] 此选项是-E选项的同义词。请改用-E,因为它与POSIX兼容,而该选项不兼容。如果省略eof-str,则文件字符串没有结尾。如果既不使用-E也不使用-e,则不使用文件字符串结尾。
-
-I replace-str 将初始参数中出现的replace-str替换为从标准输入中读取的名称。同样,未加引号的空格也不会终止输入项目。相反,分隔符是换行符。表示-x和-L 1。
-
-i[replace-str], --replace[=replace-str] 如果指定了replace-str,则此选项是-Ireplace-str的同义词。如果缺少replace-str参数,则效果与-I {}相同。不建议使用此选项;使用-I代替。
-
-L max-lines 每个命令行最多使用最大行数非空白输入行。尾随空白会导致输入行在逻辑上在下一条输入行上继续。暗示-x。
-
-l[max-lines], --max-lines[=max-lines] 每个命令行最多使用max-args参数。如果超出大小(请参阅-s选项),则使用少于max-args参数的参数,除非给出了-x选项,在这种情况下xargs将退出。
-
-n max-args, --max-args=max-args
-
-o, --open-tty 在执行命令之前,在子进程中以/dev/tty重新打开stdin。如果希望xargs运行交互式应用程序,这将很有用。
-
-P max-procs, --max-procs=max-procs 一次运行max-procs进程;默认值为1。如果max-procs为0,则xargs一次将运行尽可能多的进程。将-n选项或-L选项与-P一起使用;否则,只有一名高管会被执行。在运行xargs时,可以向其进程发送SIGUSR1信号以增加要同时运行的命令的数量,也可以向SIGUSR2发送以减少该数量。您不能将其增加到实现定义的限制之上(用–show-limits显示)。您不能将其降低到1以下。xargs永不终止其命令;当要求减少时,它仅等待一个以上的现有命令终止,然后再启动另一个命令。
请注意,由调用的进程来适当地管理对共享资源的并行访问。例如,如果其中有多个尝试打印到标准输出,则输出将以不确定的顺序(很可能是混合的)生成,除非流程以某种方式进行协作以防止这种情况。使用某种锁定方案是防止此类问题的一种方法。通常,使用锁定方案将有助于确保正确的输出,但会降低性能。如果您不想容忍性能差异,只需安排每个过程以生成单独的输出文件(或使用单独的资源)。 -
-p, --interactive 提示用户是否运行每个命令行并从终端读取一行。仅当响应以“ y”或“ Y”开头时,才运行命令行。暗示-t。
-
–process-slot-var=name 在每个正在运行的子进程中,将环境变量名称设置为唯一值。一旦子进程退出,值将被重用。例如,这可以用在基本的负载分配方案中。
-
-r, --no-run-if-empty 如果标准输入不包含任何非空格,请不要运行该命令。通常,即使没有输入,命令也会运行一次。此选项是GNU扩展。
-
-s max-chars, --max-chars=max-chars 每个命令行最多使用最大字符数字符,包括命令和初始参数以及参数字符串末尾的终止null。允许的最大值取决于系统,并且被计算为exec的参数长度限制,环境的大小和2048个字节的净空。如果该值大于128KiB,则将128Kib用作默认值。否则,默认值为最大值。 1KiB是1024字节。xargs自动适应更严格的约束。
-
–show-limits 显示由操作系统,xargs选择的缓冲区大小和-s选项所施加的命令行长度限制。如果您不希望xargs做任何事情,请通过管道从/dev/null输入输入(也许指定–no-run-if-empty)。
-
-t, --verbose 执行之前,在标准错误输出上打印命令行。
-
-x, --exit 打印xargs的版本号并退出。
-
–help 打印xargs选项的摘要并退出。
-
–version 打印xargs的版本号并退出。
示例
$ find /tmp -name core -type f -print | xargs /bin/rm -f
# 在/tmp目录下或目录下查找名为core的文件并将其删除。请注意,如果有任何包含换行符或空格的文件名,这将无法正常工作。
$ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
# 在/tmp目录下或目录下查找名为core的文件并删除它们,以正确处理包含空格或换行符的文件或目录名称的方式处理文件名。
$ find /tmp -depth -name core -type f -delete
# 在/tmp目录下或目录下查找名为core的文件并删除它们,但是比上一个示例更有效(因为我们避免了使用fork(2)和exec(2)来启动rm,并且不需要额外的xargs流程)。
$ cut -d: -f1 < /etc/passwd | sort | xargs echo
# 生成系统上所有用户的紧凑列表
命令退出状态
- 0 如果成功
- 123 如果以状态1-125退出命令的任何调用
- 124 如果命令以状态255退出
- 125 如果命令被信号杀死
- 126 如果找不到命令
- 127 如果找不到命令
- 1 如果发生其他错误