美文网首页
Linux 指令之 - find

Linux 指令之 - find

作者: 酷热summer | 来源:发表于2018-12-17 21:02 被阅读12次

    Linux 下一切皆文件,所以搜索功能 find 是一条很重要的指令。 Linux 下 find 指令用于在目录结构中快速搜索到需要的文件,并指定操作。find 指令提供了相当多的查找条件。在未指定查找目录的情况下,find 会对整个系统进行遍历。

    一、基本规则

    1、命令格式:

    find [查找目录] [查找规则] [查找完后执行的操作]
    eg: find pathname -option [-print -exec -ok ....]
    eg: find ./ -name index.html ,在当前目录下查找文件名问 index.html 的文件

    2、命令参数:

    • pathname : 所要查找的目录路径,如 . 表示当前路径,/ 表示根目录
    • -print :将 find 找到的文件输出到标准输出
    • -exec : 找到对应文件执行 exec 这个参数所指定的 shell 命令

    二、查找规则

    1、根据文件名查找

    1) -name : 根据文件名区分大小写查找

    eg : find ./ -name index.html
    在当前目录中查找名称为 index.html 的文件,区分大小写

    2) -iname : 根据文件名查找,不区分大小写

    eg : find ./ -iname index.html
    在当前目录中查找,不区分大小写,文件名可以为 index.html / inDex.htmL / Index.HTML

    3) * : 文件名通配符
    • eg : find ./ -name file*
      在当前目录下查找,区分大小写,文件名以 file 开头的文件
    • eg : find ./ -name *file
      在当前目录下查找,区分大小写,文件名以 file 结尾的文件
    • eg : find ./ -name file
      在当前目录下查找,区分大小写,文件名 包含 file 的文件
    4) ?:任意单个字符

    eg : find ./ -name 'file?'
    在当前目录下查找,区分大小写,文件名以 file 开头以任意字符结尾 的文件

    5)[]通配中括号内的任意一个字符,且 []里面的内容会被解析成单个字符

    eg :find ./ -name 'file[123]'
    在当前目录下查找,区分大小写,文件名以 file 开头 1/2/3 结尾 的文件

    2、根据文件的时间戳信息查找

    根据时间戳信息查找的时候,time 是以天为单位, min 都是以分钟为单位,+n 表示 n 以前,-n 表示 n 以内。

    1) 以最近一次存取的时间为参数
    • eg :find ./ -atime(或 -amin)+1
      1 天前(1 分钟前)存取过的文件
    • eg :find ./ -atime(或 -amin) -1
      以当前时间为起点,1 天内(1 分钟内)存取过的文件
    2)以最近一次更改的属性为参数

    示例跟以上类似,将 -atime/-amin 替换成为 -ctime/-cmin。二者不同的地方在于 -atime/-amin 是查找内容被修改的文件,-ctime/-cmin 是查找文件名称、属性被修改的文件。

    3、根据文件所属用户和所属组查找文件

    1)-user:根据文件所有者查找文案

    eg :find ./ -user root
    在当前目录下,查找所有者是 root 用户的文件

    2) -group

    eg :find ./ -group root
    在当前目录下,查找文件用户组名是 root 的文件

    4、根据 nouser 或 nogroup 查找

    1) 查找无有效 属主/属组 的文件

    eg : find ./ -nouser(-nogroup)

    5、根据权限来查找文件

    eg : find ./ perm 777

    6、根据 uid 或者 gid 查找文件

    • -uid : 根据文件的 uid 查找
    • -gid : 根据文件所在组的 gid 查找

    7、根据文件类型查找

    • eg : find ./ -type f
      在当前目录下查找文件类型为普通文件的文件
    • eg : find ./ -type d
      在当前目录下查找文件类型为目录的文件
    • 其他:
      • I :链接文件
      • b :块设备文件
      • c :字符设备文件
      • p :管道设备文件
      • s :套接字文件

    8、-size:按照文件大小查找

    • +n :大于 n 字节的文件
    • -n :小于 n 字节的文件
    • n :等于 n 字节的文件
    • eg :find ./ -size 0
      在当前目录下查找文件大小为 0 的文件

    9、-newer:按照参考文件的更改时间查找

    eg :find ./ -newer file
    查找更改时间比 file 的更改时间距离当前时间更近的文件

    10、maxdepthmindepth

    • -maxdepth:搜索深度距离当前目录最多 n 个子目录深度
    • -mindepth:搜索深度距离当前目录最少 n 个子目录深度
    • eg : find ./ maxdepth 2 -name file
      在当前目录查找,目录深度最多为 2 且文件名为 file 的文件

    11、-empty:查找路径下为空的文件或文件夹

    eg :find ./ -empty
    在当前目录下查找空的文件或文件夹

    12、-link :按照硬连接的数目进行查找

    • -link +n :硬连接的数目大于 n 的文件或文件夹
    • -link n :硬连接的数目大于 n 的文件或文件夹
    • -link -n :硬连接的数目小于 n 的文件或文件夹

    13、-a-o-not :条件处理,分别相当于 与、或、非的关系

    • eg:find ./ -szie +0 -a -size -9
      在当前目录下查找,文件大小大于 0B 小于 9b 的文件,以上两个条件必须同时满足
    • eg:find ./ -size 8 -o -name index.html
      在当前目录下查找,大小为 8k 或者文件名为 index.html 的文件,以上两个条件只要满足一个即可
    • eg:find ./ -not -size 0
      在当前目录下查找,文件大小不为 0k 的文件,进行取非操作

    14、查找完成之后的操作

    • find ./ -name file -exec ls -l {}
      在当前目录下查询文件名为 file 的文件,并且针对查询出来的文件执行 ls -l 指令
    • find ./ -name file -ok ls -l {}
      执行操作跟上个语句类似,不同在于在打印每个文件的详细信息之前都会询问是否打印

    相关文章

      网友评论

          本文标题:Linux 指令之 - find

          本文链接:https://www.haomeiwen.com/subject/wnfhkqtx.html