zoukankan      html  css  js  c++  java
  • find ./ -name *.bak | xargs rm -rf

    xargs时间久了没用,总是忘了rm -rf 后面的f,于是不成功。不想老是查,所以从网上找了些资料,先存起来。

    #find ... -exec rm {} ; 

     #find ... | xargs rm -rf 

    两者都可以把find命令查找到的结果删除,其区别简单的说是前者是把find发现的结果一次性传给exec选项,这样当文件数量较多的时候,就可能会出现“参数太多”之类的错误,相比较而言,后者就可以避免这个错误,因为xargs命令会分批次的处理结果。这样看来,“find ... | xargs rm -rf”是更通用的方法,推荐使用!

    rm不接受标准输入,所以不能用find / -name "tmpfile" |rm

    -exec   必须由一个   ;   结束,而因为通常   shell   都会对   ;   进行处理,所以用   ;   防止这种情况。   
      {}   可能需要写做   '{}',也是为了避免被   shell   过滤

    find ./ -type f -exec grep iceskysl {} /dev/null ; 
    ./表示从当前目录找 
    -type f,表示只找file,文件类型的,目录和其他字节啥的不要 
    -exec 把find到的文件名作为参数传递给后面的命令行,代替{}的部分 
    -exec后便跟的命令行,必须用“ ;”结束

    #find ./ -type f -name "*.cpp"|xargs grep "test" -n
    #find . -name "*cpp" -exec grep "test" {} ; -print

    find / -name *.log | xargs -n 1000 rm -f
    因为rm 接收参数的数量是有限的, 所以每次传 1000个参数给他,这样可以满足你的需求。

    补充一点,这种写法其实不是特别严谨,因为如果日志文件的命名有特殊字符的话,上面命令将会对特殊字符文件识别不了

    严谨的写法
    find / -name '*.log' -print0 |xargs -0 -n 1000 rm -f
    这里前面的print0 和 后的-0 都是对特殊字符进行处理,也就是说他会认识如"aa bb cc " 这种文件名

  • 相关阅读:
    bzoj1002/luogu2144 轮状病毒 (dp)
    bzoj1003/luogu1772 物流运输 (dijkstra+dp)
    bzoj1007/luogu3194 水平可见直线 (单调栈)
    [模板]群论
    http 协议媒体格式
    java加密类支持sha256,md5,HmacSha1,base64
    java逐行读写借助buffereader/bufferwriter
    java 基础io读写字节以及缓存读写字节
    java log4i.properties
    java 迭代器
  • 原文地址:https://www.cnblogs.com/wangchaonan/p/11077131.html
Copyright © 2011-2022 走看看