人人都会AI编程

find:按名称、类型、大小、时间、权限精准查找

更新时间:2026-07-12

find 是 Linux 下功能最强大的文件搜索工具,它不依赖预建索引,而是在指定目录中实时遍历,根据文件的各种属性进行精确匹配。掌握 find,意味着你可以随时找出符合任意条件的文件,无论是按名称、类型、大小、时间还是权限,都能应对自如。

基本语法

find [起始目录] [匹配条件] [动作]
  • 起始目录:从哪里开始搜索,默认是当前目录。
  • 匹配条件:各种测试选项,可以组合。
  • 动作:对匹配到的文件做什么(默认是 -print 打印路径)。

下面按常用维度逐一分解。


1. 按名称查找

  • -name "模式":区分大小写匹配文件名。
  • -iname "模式":不区分大小写。
  • 模式中可使用通配符:* 匹配任意字符,? 匹配单个字符。
find /var/log -name "*.log"       # 查找所有 .log 文件
find /etc -iname "*readme*"       # 查找文件名包含 readme(忽略大小写)的文件
find /home -name "*.jpg" -o -name "*.png"   # 查找 .jpg 或 .png 文件

2. 按类型查找
使用 -type 指定文件类型:

  • f:普通文件
  • d:目录
  • l:符号链接
  • b:块设备
  • c:字符设备
find . -type d -name "config"     # 查找当前目录下所有名为 config 的目录
find /dev -type b                 # 查找所有块设备文件
find . -type l                    # 查找所有符号链接

3. 按大小查找

  • -size +n[c]:大于 n 块(默认块为 512 字节)或 n 字节/千字节/兆字节。
  • -size -n[c]:小于。
  • 单位后缀:c(字节)、k(KB)、M(MB)、G(GB)。
find / -size +100M                # 查找大于 100MB 的文件
find . -size -10k                 # 查找小于 10KB 的文件
find /tmp -size +1M -size -5M     # 查找 1MB 到 5MB 之间的文件

4. 按时间查找
分为访问时间(atime)、修改时间(mtime)、状态改变时间(ctime),单位是天。也有以分钟为单位的 amin、mmin、cmin。

  • -mtime n:恰好 n 天前被修改过的文件。
  • -mtime +n:修改时间在 n 天之前(大于 n 天)。
  • -mtime -n:修改时间在最近 n 天之内(小于 n 天)。
find /var/log -mtime -7          # 最近 7 天内修改过的文件
find . -mmin -30                 # 最近 30 分钟内修改过的文件
find /etc -atime +30             # 超过 30 天未被访问的文件

5. 按权限查找

  • -perm 模式:精确匹配权限(八进制数字或符号)。
  • -perm -模式:包含指定的权限位。
  • -perm /模式:任一位匹配即可。
find . -perm 644                 # 权限恰好为 644 的文件
find /usr/bin -perm -u+s         # 查找设置了 SUID 位的文件
find / -perm /o+w                # 查找其他用户可写的文件(任一此类文件)
find . -type f -perm 777         # 查找权限为 777 的普通文件

6. 组合条件与动作

  • -o(或)连接多个条件。
  • -not! 取反(在 shell 中需转义或引号)。
  • -exec-execdir 对找到的文件执行命令,非常强大。
# 查找不属于当前用户的文件
find /data -type f -not -user $USER

# 查找所有 .tmp 文件并删除(谨慎使用)
find . -name "*.tmp" -exec rm {} \;

# 查找所有空文件,并列出详细属性
find . -type f -empty -exec ls -l {} \;

# 查找比某个参考文件更新的文件
find . -type f -newer /etc/passwd

实用技巧

  • 如果目录很深,文件极多,可适当限制搜索深度:-maxdepth-mindepth
  • 写脚本时,优先使用 -print0xargs -0 配合处理带空格的文件名:
  find /path -name "*.log" -print0 | xargs -0 rm
  
  • 查找后批量处理文件改名、压缩、移动等,-exec 是最直接的方式。

掌握 find 就拥有了在文件系统中“指哪打哪”的能力,无论是日常清理、安全审计还是脚本自动化,它都是无可替代的瑞士军刀。