find命令

2020-04-05  本文已影响0人  利欧leo丶

在指定目录下查找文件;
基本结构:find [paths] [expressions] [actions]
paths: 接受一个或多个路径作为搜索范围,并在该路径下递归搜索;
expression: 搜索条件,主要有以下几种条件:

  1. 按文件名搜索:
    • -name:区分大小写,-iname:不区分大小写;
    • ?:表示任何一个单一的符号;
    • *: 表示任意数量(包括0)的位置符号;
    • find /usr -name '*.txt': 查找/usr目录下所有文件名以.txt结尾的文件;
    • find /usr -name '????': 查找/usr目录下所有文件名刚好为4个字符的文件;
    • 有时候需要匹配完整的路径,可以使用-path-ipath选项;
    • find /usr -path '*/src/*.txt'查找/usr下所有文件名以.txt结尾的文件或目录,且该文件的父目录必须是src
  2. 根据文件类型:
    • 如果只想搜索得到文件或目录,即不想它们同时出现在结果中,可以使用-type选项指定文件类型。
    • -type选项最常用的参数如下:
      • f: 文件
      • d: 目录
      • l: 符号链接
    • find /usr -type d -name 'python*' 检索/usr下所有文件名以python开头的目录;
  3. 检索空文件:
    • find 命令支持 -empty 选项用来检索为空的文件或目录。空文件即文件里没有任何内容,空目录即目录中没有任何文件或子目录。
    • find ~ -type d -empty 检索用户主目录下所有的空目录
  4. 反义匹配:
    • 检索 /usr 下所有文件名.txt 为后缀的文件:find /usr -type f ! -name '*.txt'
    • 检索 /usr 下所有内容不为空的文件: find /usr -type f ! -empty
  5. 根据文件的所属权检索:
    • 为了检索归属于特定用户的文件或目录,可以使用 -user 选项。-group 选项则可以根据文件或目录的属组进行检索。
    • find / -type f -user starky 检索根目录下所有属主为 starky 的文件。
  6. 根据时间日期进行检索:
    • 有时候,需要根据文件创建或修改的时间进行检索。
    • Linux 系统中,与文件相关联的时间参数有以下三种:
      • 修改时间(Modification time):最后一次文件内容有过更改的时间点;
      • 访问时间(Access time):最后一次文件有被读取过的时间点;
      • 变更时间(Change time):最后一次文件有被变更过的时间点(如内容被修改,或权限等 metadata 被修改);
    • 与此对应的是 find 命令中的 -mtime-atime-ctime 三个选项。这三个选项的使用规则:
      • -mtime 2:该文件 2 天前被修改过;
      • -mtime -2:该文件 2 天以内被修改过;
      • -mtime +2:该文件距离上次修改已经超过 2 天时间;
    • find /usr -type f -mtime 2 检索 /usr 下两天前被修改过的文件。
    • 如果觉得 -mtime 等选项以为单位时间有点长,还可以使用 -mmin-amin-cmin
    • find /usr -type f -mtime +50 -mtime -100 检索 /usr 下 50 到 100 天之前修改过的文件。
    • find /usr -type f -mtime 2 -amin 5 检索 /usr 下两天前被修改过且 5 分钟前又读取过的文件。
  7. 根据文件大小检索:
    • -size 选项允许用户通过文件大小进行搜索(只适用于文件,目录没有大小)
    • 表示文件大小的单位由以下字符组成:
      • c:字节
      • k:Kb
      • M:Mb
      • G:Gb
    • 另外,还可以使用 +- 符号表示大于小于当前条件。
    • find / -size +1G 检索文件大小高于 1 GB 的文件。
  8. 根据文件权限检索:
    • find 命令可以使用 -perm 选项以文件权限为依据进行搜索。
  9. 对搜索结果执行命令:
    • -delete 选项可以用来删除搜索到的文件和目录
    • 如删除 home 目录下所有的空目录:find ~ -type d -empty -delete
上一篇下一篇

猜你喜欢

热点阅读