xargs

组织参数表与执行命令


语法格式

xargs [-0prtx] [-a file] [-d delim] [-E eofstr] [-I [repstr]] [-L maxlines]
      [-n maxargs] [-P maxprocs] [-s maxchars] [--show-limits] [cmd [initargs]]
xargs [--help] [--version]

命令简介

xargs命令用于读取标准输入的文件名参数表,文件名之间使用空格(可加单双引号或反斜线转义符号保护)、换行符或NULL字符作为分隔符,使用命令行提供的初始参数initargs与来自标准输入的文件名参数表作为命令行指定命令cmd的参数,一次或多次执行指定的命令(默认的命令是/bin/echo)。如果标准输入提供的数据存在空行,忽略之。

如果文件名中含有空格等特殊字符,默认的处理方式有可能存在问题。在此情况下,最好使用“-0”选项。但前提是必须确保提供文件名参数列表的程序也使用NULL字符作为文件名分隔符。例如,如果是利用find命令提供xargs命令的输入数据,可在运行find命令时选用“-print0”选项。

命令选项

-a file, --arg-file=file  读取指定的文件而非标准输入。如果指定了这个选项,在命令运行期间,标准输入将保持不变。否则,把标准输入重定向到/dev/null。

-d delim, --delimiter=delim  使用指定的字符取代空白字符,作为输入的文件名参数表的文件名终止符。输入数据中的每个字符,包括引号和反斜线均作为普通字符或文字处理,禁用文件结束标志字符串(也作为普通字符处理)。指定的文件名分隔符可以是单个字符、转义字符(如“\n”),以及八进制或十六进制的转义字符序列等。当输入的文件名参数使用换行符作为分隔符时,可以使用这个选项。

-E eofstr, -e[eofstr], --eof[=eofstr]  使用指定的字符串作为文件结束标志。如果输入行中含有文件结束标志字符串,忽略后续的字符。如果“-E”或“-e”选项均未指定,表示不使用任何文件结束标志字符串。在“-e”选项中,如果省略了eofstr,表示没有文件结束标志字符串。注意,“-e” 选项即将废弃,使用“-E”选项代之。

-I repstr, -i[repstr], --replace[=repstr]  使用从标准输入读取的名字,替换初始参数initargs中出现的指定字符串repstr。此外,未加引号的空白字符不能作为输入文件名参数的终止符,相反,只有换行符才能作为分隔符解释。指定“-I”选项蕴含着同时指定了“-x”与“-L 1”选项。如果“-i”选项省略了repstr参数,其效果等同于“-I{}”选项。“-i”选项即将废弃,使用“-I”选项代之。

-L maxlines, -l[maxlines], --max-lines[=maxlines]  每个命令行的非空物理输入行最多不能超过指定的数量。如果行尾存在多余的空格,按行延续符解释,导致行数增加。指定“-L”选项蕴含着同时指定了“-x”选项。在“-l”选项中,maxlines参数是选用的。如果未指定maxlines,默认值是1。但在“-L”选项中,maxlines参数不能省略。“-l”选项即将废弃,使用“-L”选项代之。

-n maxargs, --max-args=maxargs  指定每个命令行最多能够使用的参数个数。如果参数的字符总数超出了“-s”选项指定的最大字符长度,且又未指定“-x”选项,只能使用少于maxargs指定数量的参数,否则立即终止运行xargs。

-p, --interactive  提示用户是否运行每个命令行,然后等待用户给予回应。仅当用户输入“Y”或“y”并按下Enter键之后才运行命令行。指定这个选项蕴含着同时指定了“-t”选项。

-P maxprocs, --max-procs=maxprocs  指定最多能够同时运行多少个xargs进程,默认值为1。如果maxprocs是0,xargs能够同时运行的进程数量理论上几乎没有限制。

-r, --no-run-if-empty  如果标准输入完全是空的(未提供任何数据),禁止运行xargs命令。通常,即使没有任何输入,xargs也会运行一次。这个选项是GNU的一个扩充特性。

-s maxchars, --max-chars=maxchars  指定每个命令行最多能够使用的字符数量,其中包括命令、初始参数(initialargs)及参数表后面的NULL终止符。

-t, --verbose  开始执行前,在标准错误输出上显示命令行。

-x, --exit  如果参数的字符总数超出了“-s”选项指定的最大字符长度,终止运行xargs命令。

-0, --null  使用NULL字符取代空白字符,作为输入文件名参数列表的文件名终止符。输入数据中的引号和反斜线等均作为普通字符处理。同样,也禁止处理文件结束标志字符或字符串。当输入文件名参数中含有空白字符、引号或反斜线等字符时,选择这个选项是非常有用的。GNU find命令“-print0”选项生成的输出数据适合于用作“-0”选项的输入。

--show-limits  显示操作系统对命令行字符长度的限制,xargs能够选择的缓冲区的大小,以及对“-s”选项能够设置的上限等。

应用实例

1. 从/home目录开始,检索指定的文件core,利用管道递交给xargs命令,调用rm命令予以删除。

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

2. 同上,只是find命令输出的文件名使用NULL取代换行符作为文件名分隔符。

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

3. 如果需要处理的文件名参数不是太多,以至于超出系统容许的命令行参数的字符长度,一般不需要使用xargs命令。像上面的两个例子,使用find命令本身直接删除文件效率会更高。

$ find /home -depth -name core -type f -delete

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z