find -exec 与xargs 区别

find . -name "*.txt" -exec rm {} \;
find . -name "*.txt" | xargs rm {} 


-exec
    1.参数是一个一个传递的,传递一个参数执行一次rm
    2.文件名有空格等特殊字符也能处理
-xargs 
    1.一次将参数传给命令,可以使用-n控制参数个数
    2.处理特殊文件名需要采用如下方式:
    find . -name "*.txt" print0 |xargs -0 rm {} 

实验结果如下,可以清楚看到参数传递过程

  1. [root@andes.com ~/tmp/dir]#find . -type f |xargs -t -n 2 echo  
  2. echo ./data.txt ./env2.txt   
  3. ./data.txt ./env2.txt  
  4. echo ./env.txt ./export2.txt   
  5. ./env.txt ./export2.txt  
  6. echo ./s.txt ./d.txt   
  7. ./s.txt ./d.txt  
  8. echo ./export.txt ./set.txt   
  9. ./export.txt ./set.txt  
  10. echo ./fuck.txt   
  11. ./fuck.txt  
  12. [root@andes.com ~/tmp/dir]#find . -type f -exec echo begin {} \;  
  13. begin ./data.txt  
  14. begin ./env2.txt  
  15. begin ./env.txt  
  16. begin ./export2.txt  
  17. begin ./s.txt  
  18. begin ./d.txt  
  19. begin ./export.txt  
  20. begin ./set.txt  
  21. begin ./fuck.txt  
  22. [root@andes.com ~/tmp/dir]#  


技巧: find -print0  与 xargs -0 的结合避免文件名有特殊字符如空格,引号等无法处理:

 find . -name "*.txt" print0 |xargs -0 rm {} 

分割线
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS