xargs-命令

xargs命令

xargs命令可以通过管道或者stdin接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数。

xargs 与管道有什么不同

(base) [root@localhost Tana]# echo "--help"| cat
--help
(base) [root@localhost Tana]# echo "--help"| xargs cat
Usage: cat [OPTION]... [FILE]...
Concatenate FILE(s), or standard input, to standard output.

  -A, --show-all           equivalent to -vET
  -b, --number-nonblank    number nonempty output lines, overrides -n
  -e                       equivalent to -vE
  -E, --show-ends          display $ at end of each line
  -n, --number             number all output lines
  -s, --squeeze-blank      suppress repeated empty output lines
  -t                       equivalent to -vT
  -T, --show-tabs          display TAB characters as ^I
  -u                       (ignored)
  -v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB

从这两个列子可以看到 ,管道只是把 标准输入给下一个命令当做内容,而 ,xargs是把echo 的内容 当做下一个命令的 命令参数

xargs 选项

-d 选项 (指定分隔符)

默认情况下xargs将其标准输入中的内容以空白(包括空格、Tab、回车换行等)分割成多个之后当作命令行参数传递给其后面的命令,并运行之,我们可以使用 -d 命令指定分隔符,例

echo "nameXnameXnameXname" | xargs -dX

name name name name

-n 选项( max-args)

选项表示将xargs生成的命令行参数,每次传递几个参数给其后面的命令执行,例如如果xargs从标准输入中读入内容,然后以分隔符分割之后生成的命令行参数有10个,使用 -n 3 之后表示一次传递给xargs后面的命令是3个参数,因为一共有10个参数,所以要执行4次,才能将参数用完。

(base) [root@localhost Tana]# echo '11@22@33@44@55@66@77@88@99@00' | xargs -d '@' -n 3 echo 
11 22 33
44 55 66
77 88 99
00

-p 选项 (interactive)

使用该选项之后xargs并不会马上执行其后面的命令,而是输出即将要执行的完整的命令(包括命令以及传递给命令的命令行参数),询问是否执行,输入 y 才继续执行,否则不执行。这种方式可以清楚的看到执行的命令是什么样子,也就是xargs传递给命令的参数是什么,例如:

(base) [root@localhost Tana]# echo '11@22@33' | xargs -p -d '@'  echo 
echo 11 22 33
 ?...y
11 22 33

-E 选项 (eof-str)

该选项指定一个字符串,当xargs解析出多个命令行参数的时候,如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令

(base) [root@localhost Tana]# echo '11 22 33' | xargs -E '33' echo 
11 22

xargs -0  用NULL来作为分隔符,通常与 find  搭配

find -print0表示在find的每一个结果之后加一个NULL字符

find . -type f -name "*.sh" -print0 | xargs -0  rm -f

-I 选项  (replace-str)

使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次

#复制所有图片文件到 /data/images 目录下:
ls *.jpg | xargs -n1 -I cp {} /data/images
原文地址:https://www.cnblogs.com/yan-2010/p/14330401.html