命令介绍xargs可以从stdin中以空格或换行分隔形成空格分隔的参数(arguments),传递给其他命令。因为使用空格作为分隔符,当某些文件名或其他有意义的字符串中包含空格时,xargs可能会误判。简单的说,xargs的作用就是给其他命令传递参数,是构建单行命令的重要组成部分之一。之所以使用xargs是因为很多命令不支持使用管道|传递参数,例如:find/sbin-perm+700|ls-l#这个命令是错误的,因为标准输入不能作为ls的参数find/sbin-perm+700|xargsls-l#这是正确的命令格式xargs[OPTIONS][COMMAND]选项说明注意,长选项的强制参数对于短选项也是强制的。-0,--null#如果输入的stdin中包含特殊字符,如backtick`,backslash,space等字符,xargs会将其恢复为正常字符。对于默认选项-a,--arg-file=FILE#从指定文件FILE中读取输入内容,而不是标准输入-d,--delimiter=DEL#指定xargs处理输入内容时的分隔符。xargs默认处理输入内容以空格和换行符作为分隔符,参数以空格分隔-EEOF_STR#EOF_STRistheendoffilestring,表示输入结束-e,--eof[=EOF_STR]#相当于与-E选项不同,-E选项不符合POSIX,并且EOF_STR不是强制性的。如果没有EOF_STR,说明输入没有终止符-IREPLACE_STR#将xargs输出的每个参数分别赋给后面的命令,参数需要用指定的替换字符串REPLACE_STR替换。REPLACE_STR可以使用{}$@等符号,其主要作用是在xargs命令后有多个参数时调整参数位置。例如备份一个后缀为txt的文件:find.-名称“*.txt”|xargs-I{}cp{}/tmp/{}.bak-i,--replace[=REPLACE_STR]#与-I选项相同,参数REPLACE_STR可选,默认为{}。推荐使用-I选项,因为它符合POSIX-LMAX_LINES#限制最大输入行数。-x选项隐含-l,--max-lines[=MAX_LINES]#效果与-L选项相同,参数MAX_LINES可选,默认为1,推荐使用-Loption因为它符合POSIX标准-n,--max-args=MAX_ARGS#表示命令在执行时一次使用的最大参数个数-o,--open-tty#执行命令前,在Re-在子进程中将stdin作为/dev/TTY打开。如果您希望xargs运行交互式应用程序,这将很有用-P,--max-procs=MAX_PROCS#每次运行的最大进程数;默认为1。如果MAX_PROCS为0,xargs将同时运行尽可能多的进程。一般与-n或-L选项一起使用-p,--interactive#每次执行一个参数时询问用户--process-slot-var=NAME#设置指定的环境变量为每个runningchild中的唯一值过程。一旦子进程退出,这个值将被重用。比如这个可以用于初始负载分配方案-r,--no-run-if-empty#当xargs的输入为空时,停止xargs,不需要执行后续命令。是默认选项-s,--max-chars=MAX_CHARS#命令行的最大字符数是指xargs后面的命令的最大命令行字符数,包括命令、空格和换行符。每个参数分别传递给xargs后面的命令--show-limits#显示操作系统对命令行长度的限制-t,--verbose#先把命令打印到标准错误输出,再执行-x,--exit#与-s一起使用,当命令行字符数大于-s指定的值时,退出xargs--help#显示帮助信息并退出--version#显示版本信息并退出Common例子1.反转[Shell]引号中的特殊字符,还原为普通字符。回声'`0123`456789'|xargs-techoecho`0123`456789`0123`456789如果直接执行下面的操作,会报找不到命令01234的错误,因为backticks会将01234当作Shell中的命令来执行,但01234不是命令。-t表示先打印命令,再执行。echo`01234`56789-bash:01234:commandnotfound2.xargs读入参数时设置结束标志,以逗号结束。这里要注意,结束标志必须是一个单独的字段,即用空格或换行符分隔的字段。回声01234,56789|xargs-E","012343,使用rm、mv等[命令]同时操作多个文件时,有时会报“argumentlisttoolong”的错误。这时候可以使用xargs来解决。xargs对标准输入的字符串进行定界后,作为参数传递给后面的[command]。例如,为当前目录下的所有文件添加扩展名。ls|xargs-t-imv{}{}.bak#选择符合条件的文件ls|grep-E"201701|201702|201703"|xargs-I{}mv{}{}.bak4.设置命令行最大字符数。默认情况下,参数会被一个一个地传递到命令中执行。回声“0123456789”|xargs-t-s11echo0123401234echo56789567895,设置每次标准输入的行数作为命令参数,默认是将标准输入中的所有行合并为一行,传递给命令执行一次。echo-e"01234n56789n01234"|xargs-t-L2echoecho01234567890123456789echo01234012346将文件中以空格分隔的内容组合成一行输出。#列出文件内容cattest.txtbcdefghijklmno#多行输入合并为一行输出cattest.txt|xargsabcdefghijklmno7,结合ps、grep、awk、kill,强制终止指定进程。ps-ef|grepspp|awk'{printf"%s",$2}'|xargskill-91ps-ef|grepspp用于查找包含spp的进程,awk'{printf"%s",$2,FNR}打印出目标进程ID,xargskill-9将目标进程ID作为a参数kill-9杀死进程。
