zoukankan      html  css  js  c++  java
  • linux find命令强大之处

    find命令
    find pathname -options [-print -exec -ok ...]
      -print: find命令将匹配的文件输出到标准输出。
      -exec: find命令对匹配的文件运行该參数所给出的shell命令。对应命令的形式为'command' { } ;,注意{ }和;之间的空格。
      -ok: 和-exec的作用同样,仅仅只是以一种更为安全的模式来运行该參数所给出的shell命令,在运行每个命令之前,都会给出提示,让用户来确定是否运行。


    样例:
    $ find /etc -name "host*" -print 在/etc文件夹中查找文件名称以host开头的文件;
    $find . -name "[a-z][a-z][0--9][0--9].txt" -print 在当前文件夹查找文件名称以两个小写字母开头,跟着是两个数字,最后是.txt的文件;

    另外find是分大写和小写的,假设不想分大写和小写,可用-iname替换-name.
    -type f,表示仅仅找file,文件类型的,文件夹和其它字节啥的不要
    find ./ -type f -exec grep iceskysl {} /dev/null ;

    适用于正则查找,也适用于内容查找:
    查找文件夹下的全部文件里是否含有某个字符串 ,xargs表示把后面的结果作为前面命令的參数:
    find .|xargs grep -ri "IBM" 相当于grep –ri “IBM” ./
    查找文件夹下的全部文件里是否含有某个字符串,而且仅仅打印出文件名称
    find .|xargs grep -ri "IBM" -l 相当于grep –ril “IBM” ./

    -exec作为find命令的參数,使用{}替换find的结果,末尾要加;作为-exec命令的终结符:
    拷贝文件夹下全部的.py文件:
    find ./ -name *.py -exec cp {} /tmp/ ;
    find ./ -name "*.txt" -exec grep "bin" {} ;
    find ./ -name "*.txt" -exec rm {} ; 
    shell的内建命令exec将并不启动新的shell,而是用要被运行命令替换当前的shell进程,并且将老进程的环境清理掉,并且exec命令后的其他命令将不再运行。

    当然,find ... | xargs rm -rf   也有一样的作用。

    find能够有逻辑运算,特别是取非:
    find ./ ! -name "extract*"          #找出目录下全部不以extract開始的文件
    find ./ -name "*.py" -o -name "*.sh"         # or的缩写,找出目录下全部以py或者sh为后缀的文件
    find ./ -name "*.java" -a -size +100k -mmin -10    #查找当前文件夹下(递归子文件夹)的全部名为*.java而且改动时间在10分钟之内的文件,-a是默认选项
    find ./ ! -name "*.py" -o -name "*.sh"         # 找出目录下全部不是以(py或者sh)为后缀的文件
    find ./ ! -name "*.py" -exec rm {} ;          #删除目录下全部不是以.py结尾的文件
  • 相关阅读:
    Codeforces Round #383 D
    [HNOI2010]弹飞绵羊
    多项式幂函数(加强版)
    「ZJOI2015」地震后的幻想乡
    [AHOI2013]作业
    MVC3+EF4.1学习系列(九)-----EF4.1其他的一些技巧的使用
    MVC3+EF4.1学习系列(八)-----利用Repository and Unit of Work重构项目
    MVC3+EF4.1学习系列(七)-----EF并发的处理
    MVC3+EF4.1学习系列(六)-----导航属性数据更新的处理
    MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3927842.html
Copyright © 2011-2022 走看看