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 -3 | 3 天内修改过的文件 |
| 找到后执行 | 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 的结果)
同层(侦探工具组合)
- grep ← find 找文件位置,grep 搜文件内容;两个是黄金搭档
下游(找到文件之后)
管道组合(高级)
- 管道 ← find 的输出通过管道传给其他命令