博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
find -exec 与xargs 区别
阅读量:6592 次
发布时间:2019-06-24

本文共 2073 字,大约阅读时间需要 6 分钟。

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 {} 

find 

       -print True; print the full file name on the standard output, followed by a newline.   If you are piping the
              output of find into another program and there is the faintest possibility that the  files  which  you
              are  searching  for  might  contain  a  newline, then you should seriously consider using the -print0
              option instead of -print.  See the UNUSUAL FILENAMES section for information about how unusual  char-
              acters in filenames are handled.
       -print0
              True;  print  the full file name on the standard output, followed by a null character (instead of the
              newline character that -print uses).  This allows file names that contain newlines or other types  of
              white space to be correctly interpreted by programs that process the find output.  This option corre-
              sponds to the -0 option of xargs.

xargs 

       -0     Input items are terminated by a null  character  insteadof  by

     whitespace,  and the quotes and backslash are not special (every
     character is taken literally).  Disables the end of file string,
     which  istreated  like any other argument.  Useful when input
     items might contain white space, quote  marks,  or  backslashes.
     The  GNU  find  -print0  option produces input suitable for this
     mode.

转载于:https://www.cnblogs.com/wajika/p/6654628.html

你可能感兴趣的文章
linux统计多个文件大小总和
查看>>
java基础-Eclipse开发工具介绍
查看>>
JS常见的字符串操作
查看>>
洛谷P1069 细胞分裂 数学
查看>>
JAVA中的编码分析
查看>>
查看源代码Source not found及在eclipse中配置jdk的src.zip源代码
查看>>
uniGUI试用笔记(二)
查看>>
HOG特征-理解篇
查看>>
Microsoft.AlphaImageLoader滤镜解说
查看>>
extjs_02_grid(显示本地数据,显示跨域数据)
查看>>
超过响应缓冲区限制
查看>>
ubuntu 下安装 matplotlib
查看>>
webservice的几个简单概念
查看>>
underscore 1.7.0 api
查看>>
spring Transaction Management --官方
查看>>
iOS开发-清理缓存功能的实现
查看>>
IS_ERR、PTR_ERR、ERR_PTR
查看>>
html5 canvas 奇怪的形状垂直渐变
查看>>
mac java环境
查看>>
lamp 一键安装
查看>>