文件查找:

find,locate

*** locate路径名 中包含字符串 即匹配;

依赖于已建立的数据库  速度较快  类似whatis搜索实现  

    系统自动周期实现

    updatedb手动更新数据库

    索引构建极消耗资源

 特征:速度较快  模糊查找  !非实时查找

    -b只匹配路径名中的基名    

    -c统计符合条件的文档数量

    -r  BRE 可使用正则表达式

    locate ./  *.repo   本目录下.repo结尾的文件或目录

*** find [OPTIONS] [查找起始路径][查找条件][处理动作]

    起始路径:指定目录下搜索 默认当前目录;

    查找条件:指定查找标准, 文件名 大小 类型等

    查找动作:对匹配到的对象进行的操作 默认为输出至标准输出 输出至屏幕

     特征:查找速度略慢   精确查找   实时查找

    查找条件:

     表达式:选项;标准

     标准:执行结果为布尔值


1.根据文件名查找:      支持通配符

    -name"patt"     find /etc -name  passwd[[:alnum:]]

    -iname"patt"不区分大小写       find /etc -iname *passwd


2.根据属主属组查找:   find /testdir -uid=1000

    -user   USER  ==>  -uid UID  属主 为指定用户 的文件

    -groupGROUP ==>  -gid GID  属组 为指定组 的文件


       存在 用户被移除 文件无属主的情况

    -nouser 查找 无属主的文件       find /testdir -nouser

    -nogroup 查找 无属组的文件

    

 例  find /testdir -user zjj -type p 

    /testdir下 属主为zjj的 管道文件

      find /tmp -not \( -user root -o -iname "*zz*"\)

    /tmp 目录下 属主不为root 且 基名不包含zz的文件




3.根据类型查找:   find /dev -type s -ls

   -type TYPE

    b:块设备文件

        c:字符设备文件

        d:目录文件

        f:普通文件

        l:符号链接设备 软链接

        p:管道文件

        s:套接字文件

    

4.文件大小查找:

    -size [+|-]#UNIT

       常用单位:K,M,G相对 单位精确查找

    

        #UNIT:(#-1,#]

        -#UNIT:[0,#-1]

        +#UNIT:(#,∞)find /tmp -size +10K   /tmp下大于10K的文件  11K-∞


5.根据时间戳查找:

      以 天   为单位:

        -atime [+|-]# 

        #:[#,#-1)    前 第3天

        -#:(#,0]    前 3天以内

        +#:(∞,#-1)  3天之前

        -mtime7

        -ctime

      以 分钟 为单位

        -amin

        -mmin

        -cmin

 例    find /etc -mmin -3     3分钟内修改过的文件

 


6.根据权限查找:

    -perm [/|-] mode

        mode精确查找     find -perm 421  查找权限为421的文件

    -mode任何一类用户(u,g,o)的 每一位(r,w,x)都大于等于mode

    

 例  find ./ -perm -624  匹配当前目录含有624权限的文件

        文件权限包含mode即匹配

    /mode任何一类用户(u,g,o)的 任何一位(r,w,x)符合条件即满足


 例  find ./ -perm /124  匹配当前目录u=1 或g=2 或o=4 的文件

         满足其中之一即匹配

 例  find ./ -perm /011  不管u权限 g或o有写权限即匹配

组合标准:

    -a  默认的逻辑

    -o  满足之一则匹配

    -not,!

处理动作:

    -print输出至标准输出

    -ls类似对查到的文件执行 ls -l 输出文件详细信息

find ./ -d zjj -amin -5 -not -perm /222 -ls

    -delete删除查找到的文件!

    -fls /PATH将文件详细的信息 保存至指定文件

    

    -ok CMD {} \;对查找到的 每个文件执行CDM命令 会逐条要求确认

        固定格式\; {}表示查到的所有文件

 例  find ./ -nouser -a -nogroup -ok chown zjj:zjj {} \;

   查找当前目录下 无属主无属组的文件 全部添加属主属组zjj

    -exec CMD {} \; 相对-ok 无确认环节 直接执行CMD


 例  find ./ -perm /002 -exec mv {} {}.danger \;

当前目录下 o有写权限的 文件名加上.danger后缀

   find查找到所有文件后会 将结果一次行传递给命令,有些命令不能接受过长的参数

找到的文件过多会导致命令执行失败可用  find ...| xargs CMD

 xargs把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理