xargs 和 exec 详解

2016-08-19

xargs 和 exec 详解

xargs 应用

[root@localhost ~]# echo "1212121212">123.txt

[root@localhost ~]# ls 123.txt |xargs cat

1212121212

  它的作用就是把管道符前面的输出作为 xargs 后面的命令的输入。xargs 常常和 find 命令在一起使用,例如查找当前目录下创建时间大于 10 天的文件,然后再删除。

[root@localhost ~]# find . -mtime +10|xargs rm

  xargs 后面的 rm 也可以加选项,当是目录时,就需要 -r 选项了。

  xargs 强大的功能:

[root@localhost test]# touch 1.txt 2.txt 3.txt 4.txt 5.txt

[root@localhost test]# ls

1.txt  2.txt  3.txt  4.txt  5.txt

[root@localhost test]# ls *.txt |xargs -n1 -i{} mv {} {}_bak

[root@localhost test]# ls

1.txt_bak  2.txt_bak  3.txt_bak  4.txt_bak  5.txt_bak

  xargs -n1 -i{} 类似 for 循环, -n1 意思是一个一个对象的去处理,-i{} 把前面的对象使用{}取代,mv {} {}_bak 相当于 mv 1.txt 1.txt_bak 。

exec 应用

  使用 find 命令时,经常使用的一个选项就是 -exec 了,可以达到和 xargs 同样的效果。比如,查找当前目录下创建时间超过 10 天的文件并删除。

[root@localhost ~]# find . -mtime +10 -exec rm -rf {} \;

  这个命令中的{}也是作为前面 find 出来的文件的替代符,后面的 \ 为 ; 的脱义符,不然 shell 会把分号当成该行命令的结尾。

 批量更改文件名:

[root@localhost test]# find ./*_bak -exec mv {} {}_bak \;

[root@localhost test]# ls

1.txt_bak_bak  2.txt_bak_bak  3.txt_bak_bak  4.txt_bak_bak  5.txt_bak_bak

标题:xargs 和 exec 详解
作者:散宜生
地址:https://17kblog.com/articles/2016/08/19/1471608942345.html