用 find 入门:按条件快速定位文件

举报
yd_225636183 发表于 2026/11/06 09:58:25 2026/11/06
【摘要】 在终端里找文件,很多人第一反应是 ls 翻目录,或者凭记忆猜路径。目录一深、文件一多,这两种办法都慢。find 就是按条件搜文件的工具:告诉它从哪开始、按什么条件筛,它把符合的文件一个个列出来。最基本的用法是 `find 目录 -name "文件名"`。比如在当前目录找所有以 .log 结尾的文件:`find . -name "*.log"`。注意引号不能省:不加引号,shell 会先把 `...

在终端里找文件,很多人第一反应是 ls 翻目录,或者凭记忆猜路径。目录一深、文件一多,这两种办法都慢。find 就是按条件搜文件的工具:告诉它从哪开始、按什么条件筛,它把符合的文件一个个列出来。

最基本的用法是 `find 目录 -name "文件名"`。比如在当前目录找所有以 .log 结尾的文件:`find . -name "*.log"`。注意引号不能省:不加引号,shell 会先把 `*.log` 展开成当前目录的文件名,find 拿到的就不是你想要的模式了。

只知道文件名的一部分也没关系,`-name` 支持通配符:`find . -name "*report*"` 能找出名字里带 report 的所有文件。区分大小写有时很烦人,`-iname` 可以忽略大小写:`find . -iname "*.PDF"`,PDF、pdf 一次全找出来。

按类型筛也很常用。`-type f` 只要普通文件,`-type d` 只要目录:`find . -type d -name "node_modules"` 能快速定位散落在各处的依赖目录;`find . -type f -name "*.tmp"` 则只列临时文件,不会被目录名干扰。

时间是最实用的筛选条件之一。`-mtime -7` 表示 7 天内改过的文件,`-mtime +30` 是 30 天前改过的:`find . -type f -mtime -1` 列出今天动过的文件,排查"刚才谁改了配置"时特别顺手。`-mmin -60` 更精细,按分钟算,适合刚出问题那一小时的定位。

文件大小也能筛:`-size +100M` 找出大于 100MB 的文件,`-size -10k` 找出小于 10KB 的:`find . -type f -size +100M` 是清理磁盘前的第一步,先看大文件都在哪,再决定删什么。

找到之后常常还要接着处理,这时 `-exec` 派上用场:`find . -name "*.log" -exec ls -lh {} \;` 对每个结果执行 ls -lh;`find . -name "*.bak" -exec rm {} \;` 批量删除备份文件。`{}` 代表找到的文件,`\;` 表示命令结束。删除类操作先别急着执行,可以先用 `-print` 看一遍结果,确认无误再换 `-exec rm`,避免误删。

find 默认递归搜索整个子树,目录层级太深会很慢。用 `-maxdepth 2` 限制只搜两层:`find . -maxdepth 2 -name "*.conf"`,既快又不会漏掉常见的配置位置。反过来,`-mindepth 1` 可以排除起始目录本身。

最后提醒两点:一是 find 的条件可以组合,多个条件默认是"与"的关系,`-o` 表示"或",组合前先想清楚逻辑;二是在根目录或超大目录上直接跑 find 会很慢,先缩小起始目录,再放宽条件。

从今天开始,找文件先想到 find:一个起点、一个条件,多数"文件在哪"的问题一条命令就能收束。把它和 grep 搭配起来用——find 定位文件,grep 定位文件里的内容——终端排查的效率会再上一个台阶。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。