Linux命令-xargs
比如一个例子
echo "README.md" |cat
echo "README.md" |xargs cat
第一个例子只是输出了README.md的文件名,而后面那个命令就把文件内容都输出到终端
事实上,xargs可以把从STDIN接收的输入,用空格隔开,然后依次作为参数去调用xargs后面的命令
比如,假如我们要删除当前目录下的pdf文件,
find . -name "*.pdf" |xargs rm
看上去没有什么问题,但是假如文件中带有空格那么就有问题了。
解决:
find . –name "*.pdf" -print0 |xargs –0 rm
这里-print0告诉find在每个输出后面以'\0'结尾,-0告诉xargs用'\0'分隔,而不是空格。当然用户可以根据自己的意愿将'\0'换成自己想要的分隔符
如果要批量修改所有pdf文件的后缀名
find . –name "*.pdf" -print0 |xargs –0 -I {} mv {} {}.doc
-I {}是告诉xargs后面的命令中用{}表示占位符,将会被指定的参数替代。也可以将换成i
更多参数说明:
-p(小写):操作具有可交互性,每次执行command都交互式提示用户选择
-P(大写):修改最大进程数
-t:先打印命令,再执行后面的命令
比如:
$ date|xargs -t echo "xargs"
echo xargs 2017年03月 6日 20:07:36
xargs 2017年03月 6日 20:07:36
-a:从文件中读入作为标准输入
-e、-E:作为一个标志位,xargs分析到这个标志位后停止
-r:假如在|xargs前面没有传入参数,那么就停止xargs,直接退出
-n:只限制参数的个数,默认无
-d:设置分隔符,xargs默认的是回车,参数默认的是空格,这个参数修改xargs的
-s:设置每次构造命令(xargs后面的命令)的长度
-x:主要配合-s使用,如果满足了条件之后退出
-l、-L:从标准输入中一次读取n行传递给命令
比如:
$cat file
a
b
c
$cat file |xargs –L 2 echo
a
b