shell中的xargs命令

xargs 命令

xargs 可以读入 stdin 的数据,并且以空格符或断行字符作为分辨,将 stdin 的数据分隔成为 arguments
xargs命令的作用,是将标准输入转为命令行参数。

$ echo "hello world" | xargs echo
hello world

上面的代码将管道左侧的标准输入,转为命令行参数hello world,传给第二个echo命令。

xargs命令的格式如下。

$ xargs [-options] [command]

真正执行的命令,紧跟在xargs后面,接受xargs传来的参数。

xargs的作用在于,大多数命令(比如rm、mkdir、ls)与管道一起使用时,都需要xargs将标准输入转为命令行参数。

$ echo "one two three" | xargs mkdir

上面的代码等同于mkdir one two three。如果不加xargs就会报错,提示mkdir缺少操作参数。

一、-L 参数

使用-L参数,指定每行作为一个命令行参数。

$ xargs -L 1 find -name
"*.txt"
./foo.txt
./hello.txt
"*.md"
./README.md

上面命令指定了每一行(-L 1)作为命令行参数,分别运行一次命令(find -name)。

二、-n 参数

-L参数虽然解决了多行的问题,但是有时用户会在同一行输入多项。
-n参数指定每次将多少项,作为命令行参数。

$ echo {0..9} | xargs -n 2 echo
0 1
2 3
4 5
6 7
8 9

三、-I参数

如果xargs要将命令行参数传给多个命令,可以使用-I参数。-I指定每一项命令行参数的替代字符串。

$ cat foo.txt
one
two
three

$ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one 
two
three

$ ls 
one two three

四、其他参数

-p:参数打印出要执行的命令,询问用户是否要执行
-t:参数则是打印出最终要执行的命令,然后直接执行,不需要用户确认

例子

找到定时任务的脚本,并将它拷贝到 ./tmp/xianyu 目录

crontab -l | egrep -v "cd|python" | awk '{print $6}' | xargs -L 1 -I file sh -c 'cp file ./tmp/xianyu/'
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页