Linux find命令教程:快速高效地搜刮文件和目次(附实例详解和注意事项)

[复制链接]
发表于 2026-10-3 15:52:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

find 是什么

find 是 Linux 下最常用的文件查找命令,它按条件遍历目录树,把符合标准的文件和目录找出来。条件可以是文件名、大小、修改时间、属主、权限、文件类型等,组合能力很强。

几乎所有 Linux 发行版都预装了 find(Ubuntu、Debian、Fedora、RedHat、CentOS 等),一般不需要额外安装。

基本语法

find [路径...] [表达式]
  • 路径:从哪开始找,给多个路径就分别遍历,省略则默认当前目录。
  • 表达式:由选项、测试条件、动作组成的组合。没有表达式时默认打印全部(等价 -print)。

常用参数一览

参数作用
-name 名字按文件名匹配,支持通配符
-size 大小按文件大小匹配,如 +10M
-type 类型按文件类型,-type d 找目录、-type f 找普通文件
-mtime n按内容修改时间(单位:天)
-mmin n按修改时间(单位:分钟)
-user 用户 / -group 组按属主 / 属组
-perm 权限按权限位匹配
-empty找空文件或空目录
-exec 命令 {} \;对查到的每个文件执行命令

常用类型字母:f 普通文件、d 目录、l 符号链接、b 块设备、c 字符设备、s 套接字。

15 个实用实例

1. 按文件名精确查找

find / -name filename

2. 找大于 1MB 的文件

find / -size +1M

+1M 表示"大于",-1M 表示"小于",不带符号表示"等于"。单位还能用 k(KB)、G、b(512 字节块)。

3. 当前目录及子目录下所有 .txt 文件

find . -name "*.txt"

通配符要用引号包起来,否则 shell 会先在本地展开,条件就歪了。

4. /home 下所有以 .log 结尾的文件

find /home -name "*.log"

5. /home 下属主是 root 且大于 10MB 的文件

find /home -user root -size +10M

6. 当前目录下 5 天内修改过的文件

find . -mtime -5

时间参数的符号规律:-n 是 n 以内(更近),+n 是 n 以外(更早),n 就是大约第 n 天。

7. 找出所有空目录

find / -empty -type d

8. /var/log 下最近 5 分钟内被修改的文件

find /var/log -mmin -5

-mmin 把时间精度提到分钟,排查"刚刚有没有写日志日志"用它比 -mtime 准。

9. 查找并删除所有 .tmp 文件

find / -name "*.tmp" -exec rm {} \;
警告:这条命令威力很大,尤其是在根目录下执行。删除前务必先只查不删看一眼清单:find / -name "*.tmp",确认无误再执行;更稳妥的做法是先换成 -ok 代替 -exec,它会对每个文件询问是否执行。

10. 查找并 ls 显示详细信息

find / -name "*.sh" -exec ls -lh {} \;

注意 {} 是占位符,代表当前找到的文件,结尾的 \; 里分号要转义,否则 shell 会当成命令分隔符。

11. 当前目录下权限为 755 的普通文件

find . -type f -perm 0755

12. /home 下属于 root 的文件

find /home -owner root

13. /home 下 10 到 15 天前修改的文件

find /home -mtime +10 -mtime -15

14. /etc 下 10 天以前修改过的 .log 文件

find /etc -name "*.log" -mtime +10

15. /var/log 下 10 天内被访问过的 .log 文件

find /var/log -name "*.log" -atime -10

时间类参数有三组:-atime 访问时间、-mtime 内容修改时间、-ctime 属性变更时间(权限、属主变动也会触发)。

几个进阶写法

用 xargs 替代 -exec

文件数量很多时,-exec 会逐个启动命令,性能一般。xargs 会攒够一批再一次性传进去

find . -name "*.log" | xargs ls -lh
find /var/log -name "*.gz" | xargs -n3 rm

处理文件名可能带空格的文件,用 -print0 配 xargs -0:

find . -name "*.txt" -print0 | xargs -0 grep -l "keyword"

排除某些目录

find . -path "./node_modules" -prune -o -name "*.js" -print

在代码目录里找文件而想跳过 node_modules / .git,这个 prune 写法很常用,能省掉大量遍历开销。

限定遍历深度

find . -maxdepth 2 -name "*.conf"
find . -mindepth 1 -maxdepth 1

容易踩的坑

  • 搜根目录记得加 sudo。普通用户权限不够,/proc、/root 等目录下的文件会报一堆 Permission denied。
  • 建议用绝对路径。从 /、/home 这类明确位置开始找,能避免相对路径搞错导致漏查或误查。
  • 通配符一定加引号。-name *.txt 会被 shell 本地展开,语义就变了。
  • 删文件前先查一遍。删除类命令(-exec rm)是不可逆的,先看清单再动手。
  • 注意 -delete 的隐式深度优先。用 find -delete 时目录会被先清空再删,配合 -depth 才安全。

find 与其他查找命令的分工

  • locate:靠索引库查,速度最快,但结果是"上次索引"的快照,而且需要先 updatedb。
  • grep:按文本内容搜,find 管的是"文件名/属性",两者常组合成 grep -r 或 find | xargs grep。
  • which:在 PATH 里定位可执行文件路径。
  • whereis:找二进制文件、源码、man 手册的位置。
  • ls:列出当前目录内容,不做递归筛选。

一句话总结:按文件名和属性找东西用 find,按内容找东西用 grep 或 locate,找命令在哪用 which。

小结

find 的核心结构就是"路径 + 条件 + 动作":用 -name -type -size -mtime 等条件圈定范围,用 -print 默认输出,用 -exec/xargs 接后续动作。掌握通配引号、+/- 时间符号、{} + \; 转义这三点,实战基本就够用了。

(本文由 qidao123.com企服评测-应用市场 编辑提示整理:命令基于 GNU findutils,适用于 Ubuntu / Debian / CentOS / RHEL 等主流发行版,示例路径请按实际环境替换。)

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表