xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,其默认的使用是echo,会将管道传输过来的内容用空白替换掉换行和空白。
# cat test.txt
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
# cat test.txt | xargs
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
常用的命令如下:
-t 表示先打印命令,然后再执行。
-n:限定每行输出的个数
# cat test.txt | -n 4
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
-d:分割符,将输入按照指定分隔符进行切分
# echo "nameXnameXnameXname" | xargs -dX
name name name name
-I:指定一个替换字符串 {},这个字符串在 xargs 扩展时会被逐元素替换掉
macdoc@MacBook-Pro test % ls
nide.jpg 个人简历.pdf 你的名字.pdf 简历附件.pdf
macdoc@MacBook-Pro test % mkdir mdir
macdoc@MacBook-Pro test % ls | grep .pdf
个人简历.pdf
你的名字.pdf
简历附件.pdf
macdoc@MacBook-Pro test % ls | grep .pdf | xargs -I mv {} mdir
xargs: {}: No such file or directory #可以看到需要指定替换字符串{}
macdoc@MacBook-Pro test % ls | grep .pdf | xargs -I {} mv {} mdir
macdoc@MacBook-Pro test % ls mdir
个人简历.pdf 你的名字.pdf 简历附件.pdf