find · 侦探模式

上游:ls(先会 ls,再学 find 的深度搜索)· cd(知道在哪里搜) 下游:grep(find 找到文件,grep 搜文件内容)· chmod(find 找到文件后批量改权限) 参见:apt(用 find 找 apt 把软件装到哪里了)


一句话是什么

find 在整个文件系统里搜索文件——按名字、按类型、按时间、按大小, 就像侦探用放大镜在城市里追踪一个人。


为什么需要它

ls 只能看当前目录里有什么,找不到藏在深处的文件。

# ls:只看一层
ls ~/学习基地/
# 第1周/  第2周/  第3周/
 
# find:搜索所有层
find ~/学习基地/ -name "*.md"
# ~/学习基地/第1周/任务A.md
# ~/学习基地/第1周/任务B.md
# ~/学习基地/第2周/任务A.md
# ~/学习基地/第3周/任务C.md

真实场景

  • 你记得文件名叫 server.properties,但不知道在哪个目录
  • 你想找所有 .log 日志文件清理空间
  • 你想找 3 天内改过的文件
  • apt install unzip 之后,想知道 unzip 装到哪里了

核心用法

公式

find [搜索起点] [条件] [动作]

常用命令表

操作命令说明
按文件名搜索find ~ -name "文件名"在家目录搜
模糊搜索find ~ -name "*.md"所有 .md 文件
忽略大小写find ~ -iname "README*"大小写不敏感
只找目录find ~ -type d -name "第*"找名字以”第”开头的目录
只找文件find ~ -type f -name "*.sh"找所有 .sh 文件
按大小搜索find ~ -size +100M超过 100MB 的文件
按时间搜索find ~ -mtime -33 天内修改过的文件
找到后执行find ~ -name "*.log" -delete找到所有 log 文件并删除

搜索起点

find .       # 当前目录(最常用)
find ~       # 家目录
find /       # 整个系统(慢,要加 sudo)
find /etc    # 系统配置目录

Linux 笑话

Aaron 的 Minecraft 服务器文件解压完, 找不到 server.properties 在哪里:

$ ls ~/mc-server/
bedrock_server  start.sh  还有好多文件...

文件太多,眼睛找不到。他用了 find:

$ find ~/mc-server/ -name "server.properties"
/home/aaron/mc-server/server.properties

找到了。他又试了一个:

$ find ~/mc-server/ -name "我的世界.exe"
(没有输出)

Minecraft Bedrock Server 在 Linux 上没有 .exe, Linux 的可执行文件没有后缀。

他学到了:Windows 的直觉在 Linux 不管用, Linux 的可执行文件不叫 .exe,叫 bedrock_server(没有后缀)


例题精讲

📗 初探 Starter — 找到安装好的程序在哪里

任务:安装 tree,然后用 find 找到它被装到哪里了。

# 第一步:安装 tree
sudo apt install tree
 
# 第二步:用 find 搜索
find /usr -name "tree" -type f
# /usr/bin/tree
 
# 第三步:验证是否可执行
ls -la /usr/bin/tree
# -rwxr-xr-x 1 root root ... /usr/bin/tree
 
# 第四步:用 which(更快的方式,了解即可)
which tree
# /usr/bin/tree

你学到了什么apt install 把程序装在 /usr/bin/ 里, 这是 Linux 标准程序目录。find /usr -name "程序名" 是万能找法。


📘 应用 User — 清理学习基地的临时文件

任务:找到学习基地里所有超过 30 天没有修改的文件。

# 找 30 天以上没改动的文件
find ~/学习基地/ -type f -mtime +30
 
# 找最近 3 天改过的文件(找自己的新作业)
find ~/学习基地/ -type f -mtime -3
 
# 找大于 1MB 的文件(清理大文件)
find ~/学习基地/ -type f -size +1M
 
# 找所有空文件(可能是未写完的)
find ~/学习基地/ -type f -empty

你学到了什么

  • -mtime +N = 超过 N 天没改(+ 是”大于”)
  • -mtime -N = N 天内改过(- 是”小于”)
  • -size +1M = 大于 1MB

📙 管理 Admin — 批量操作找到的文件

任务:找到 mc-server 里所有 .log 文件,显示大小,再清空它们。

# 第一步:找到所有日志文件
find ~/mc-server/ -name "*.log" -type f
 
# 第二步:显示每个日志文件的大小
find ~/mc-server/ -name "*.log" -type f -exec ls -lh {} \;
 
# 第三步:找到超过 10MB 的日志(需要清理的)
find ~/mc-server/ -name "*.log" -size +10M
 
# 第四步:清空(不删除,只清空内容,日志程序还能继续写入)
find ~/mc-server/ -name "*.log" -type f -exec truncate -s 0 {} \;
 
# 如果想直接删除
find ~/mc-server/ -name "*.log" -type f -delete

-exec 命令 {} \; 解释

  • {} = 代表 find 找到的每个文件名(占位符)
  • \; = 表示命令结束
  • 意思:对每个找到的文件,执行后面的命令

你学到了什么find + -exec 是 Linux 批量操作的神器, 找到文件,立刻对它们做点什么。


官方文档参考

man find         # 完整手册
find --help      # 快速选项列表

find 逐层遍历目录树,对每个文件依次评估表达式;不加起点默认从 . 开始。 在线:https://manpages.ubuntu.com/find


节点链接

上游(先会这些,才能用 find 的结果)

  • ls ← find 是 ls 的升级版,先会 ls
  • cd ← 进入要搜索的目录
  • pwd ← 确认自己在哪里

同层(侦探工具组合)

  • grep ← find 找文件位置,grep 搜文件内容;两个是黄金搭档

下游(找到文件之后)

  • grep ← 找到文件后,用 grep 搜里面的内容
  • chmod ← 批量修改找到的文件权限(find -exec chmod)
  • tar ← 把找到的文件打包备份

管道组合(高级)

  • 管道 ← find 的输出通过管道传给其他命令

节点版本:v1.0 · 2026-04-20 下一个节点建议:grep管道