find . -name "*.log"在当前目录递归查找所有 .log 文件。
约 1022 字大约 3 分钟
2026-05-14
find 用于在目录树中查找文件和目录。它可以按名称、类型、大小、修改时间、权限等条件筛选结果,是排查文件位置、清理临时文件和批量处理文件时最常用的 Linux 工具之一。
`find` 用于在目录树中查找文件和目录。它可以按名称、类型、大小、修改时间、权限等条件筛选结果,是排查文件位置、清理临时文件和批量处理文件时最常用的 Linux 工具之一。
find . -name "*.log"在当前目录递归查找所有 .log 文件。
find /var/log -type f -mtime -1找出一天内修改过的普通文件。
find . -type f -size +100M定位超过 100MB 的文件。
find . -name "*.tmp" -delete谨慎使用,先不带 -delete 预览结果。
find 起始目录 条件 动作常见组成:
起始目录:从哪里开始找,例如 .、/var/log、/home条件:按名称、类型、时间、大小、权限等筛选动作:默认打印结果,也可以删除、执行命令或格式化输出find . -name "*.conf" # 查找 .conf 文件,区分大小写
find . -iname "*.jpg" # 查找 .jpg/.JPG,忽略大小写
find . -type f -name "*.log" # 只查普通文件
find . -type d -name "cache" # 只查目录常见 -type:
| 类型 | 含义 |
|---|---|
f | 普通文件 |
d | 目录 |
l | 符号链接 |
find . -type f -size +100M # 大于 100MB
find . -type f -size -10k # 小于 10KB
find . -type f -mtime -7 # 7 天内修改过
find . -type f -mtime +30 # 30 天前修改过
find . -type f -mmin -60 # 60 分钟内修改过时间条件里,-7 表示小于 7 天,+30 表示大于 30 天,不带符号则表示刚好那个区间。
find . -maxdepth 1 -type f # 只查当前目录,不递归子目录
find . -mindepth 2 -name "*.log" # 跳过当前目录这一层
find . -path "*/node_modules" -prune -o -name "*.js" -print排除目录时,-prune 很实用。上面的例子表示跳过 node_modules 后再查找 JavaScript 文件。
find . -name "*.log" -exec ls -lh {} \;
find . -name "*.log" -exec rm {} \;
find . -name "*.log" -print0 | xargs -0 du -h{} 会被替换为找到的文件名。文件名可能包含空格时,优先使用 -print0 | xargs -0。
删除前先预览
find ... -delete 和 find ... -exec rm ... 都很危险。先运行不带删除动作的命令确认结果,再执行删除。
find 不是简单的“按名字查文件”,而是从某个目录开始,按条件筛选文件,再决定要不要对结果执行动作。可以把它拆成三段:
从哪里找 + 按什么条件找 + 找到后做什么find /var/log -type f -name '*.log' -mtime +7 -print上面这条命令的意思是:从 /var/log 开始,只找普通文件,名字以 .log 结尾,并且修改时间超过 7 天,最后打印出来。
find ... -delete 很强,也很危险。建议固定按这个顺序:
find . -name '*.tmp' -print。-maxdepth。find . -name '*.tmp' -delete。注意路径范围
find / -name ... 会从根目录全盘搜索,慢且容易产生大量权限错误。日常排查应尽量从明确目录开始。
版权归属:Shuo Liu