文件查找命令——find

之前学过的grep,egrep,sed都是文本查找的相关命令,用来查找字符串的。
现在学习一下关于文件查找的命令。
文件查找:
locate:
非实时的,模糊匹配,查找是根据全系统文件数据库进行的;系统的数据库每天都会更新;
updatedb命令, 手动生成文件数据库;
优势是速度快,了解一下就可以了,文件查找主要使用find命令。


  • find:
    实时,精确,支持众多查找标准;
    通过遍历指定目录中的所有文件完成查找,所以速度慢;

  • 用法:find 查找路径 查找标准 查找到以后的处理运作
    查找路径:可以省略,默认为当前目录
    查找标准:可以省略,默认为指定路径下的所有文件
    处理运作:可以省略,默认为显示
    如果直接执行find命令,就会显示当前目录下的所有文件,包括子目录。

  • 匹配标准:通过选项指定
    -name 'FILENAME':根据文件名作精确匹配,注意文件名要加引号!
    文件名通配:比如 find /etc -name 'passwd匹配在/etc下文件名有passwd的文件
    *:任意长度的任意字符
    ?:任意单个字符
    [ ]:指定范围内的任意单个字符
    -iname 'FILENAME': 文件名匹配时不区分大小写
    -regex PATTERN:基于正则表达式进行文件名匹配,PATTERN是正则表达式的模式;

    -user USERNAME: 根据属主查找,查找属于某个属主的文件。
    -group GROUPNAME: 根据属组查找

    -uid UID: 根据UID查找
    -gid GID: 根据GID查找

    -nouser:查找没有属主的文件
    -nogroup: 查找没有属组的文件

    -type 根据文件类型查找
    f:普通文件
    d:目录
    c:字符
    b:块设备
    l:链接
    p:管道
    s:链接

    -size :根据文件大小查找,通常是一个数字加一个单位符。
    [+|-]#k:+10k 就是大于10k 
    [+|-]#M:-10M就是小于10M
    [+|-]#G:同上一样,如果不加+ - 号就是精确正好

  • 组合条件(一次完成多个条件):
    -a:与;两个条件同时满足比如:find /tmp -nouser -a -type d
    -o:或;满足一个条件
    -not :非

  • 根据时间戳查找:
    -mtime:修改时间(单位是天)
    -ctime:改变时间
    -atime:访问时间
    上面三个后面都可以加+ - 后面附数字,比如5表示距离今天正好五天访问过,-5表示至少这五天访问了,+5表示至少五天没访问了。
    -mmin:修改时间(单位是分钟)
    -cmin:改变时间
    -amin:访问时间
    [+|-]# 和上面的一样
    比如:find /tmp -atime +5

  • 根据权限查找: 
    -perm MODE:精确匹配
    /MODE: 任意一位匹配即满足条件
    -MODE: 精确匹配;文件权限能完全包含此MODE时才符合条件
    内部有或和与逻辑比如:-001意思是其他组必须有执行权限的才匹配,其他的权限有没有无所谓。/022表示组有写权限或者其他组有写权限的都可以匹配。
    例如:find /tmp -perm -007 这表示文件的其他组有读写执行权限的文件都匹配,属主和属组的权限无所谓是什么。

  • 运作:
    默认-print: 显示
    -ls:类似ls -l的形式显示每一个文件的详细
    -ok COMMAND {} \; 反斜线分号结尾,{}作为文件名称占位符;每一次操作都需要用户确认
    -exec COMMAND {} \; 和上一个ok用法一样;只是每一次操作不需要用户确认。
    比如:
    find ./ -perm -006 -exec chmod o-w {} \; 找到其他用户可读可写的文件,将他的写权限去掉chmod o-w是命令{}表示引用你找到的文件。
    find ./ -perm -020 -exec mv {} {}.new \; 找到属组有写权限的文件将他的名字改为原来的名字后面加.new,因为单纯用mv命令应该这样写mv name name.new,所以{}出现两次。只要引用文件名就要加{}。

猜你喜欢

转载自blog.csdn.net/sinat_39440759/article/details/82919593