find 命令通过 -name(大小写敏感)或 -iname(不区分大小写)按文件名查找,需用引号包裹通配符 *、?、[abc];可限定路径、排除目录、结合 -type/-size/-mtime 等条件筛选,并用 -exec 或 -ok 对结果执行操作。

直接用 find 加 -name 或 -iname 就能按文件名找,关键是要把通配符引起来、注意大小写、选对起始路径。
按精确名称或通配符匹配
-name 区分大小写,-iname 不区分。通配符 *(任意多字符)、?(单个字符)、[abc](括号内任一字符)都支持,但必须用引号包裹,否则 shell 会提前展开。
- 找当前目录下所有
.log文件:find . -name "*.log" - 找名字叫
config.txt的文件(大小写敏感):find /etc -name "config.txt" - 忽略大小写找
readme相关文件:find . -iname "*readme*" - 找以大写字母开头、以数字结尾的
.sh脚本:find ~/bin -name "[A-Z]*[0-9].sh"
排除干扰和限定范围
不加路径默认从当前目录开始,但往往要缩小范围避免慢或权限报错;也可以用逻辑运算排除不需要的路径。
- 只在
/var/log下查,不进子目录太深:find /var/log -maxdepth 2 -name "syslog.*" - 跳过
node_modules这类大目录:find . -path "./node_modules" -prune -o -name "*.js" -print - 找名字不是
.tmp的文件:find /tmp ! -name "*.tmp"
结合类型或其它条件进一步筛选
单靠文件名可能不够准,常和 -type、-size、-mtime 等组合使用。
- 确认是普通文件(不是目录或链接)再找:
find /home -type f -name "*.conf" - 找最近 3 天修改过的配置文件:
find /etc -type f -name "*.conf" -mtime -3 - 找大于 1MB 的日志文件:
find /var/log -type f -name "*.log" -size +1M
找到后直接处理而不是只打印
默认只显示路径,加 -exec 可对每个结果运行命令,{} \; 是占位符,\; 必须转义。
- 查看匹配文件的内容前 5 行:
find . -name "README*" -exec head -n 5 {} \; - 批量改权限:
find ./scripts -name "*.sh" -exec chmod +x {} \; - 安全删除(先确认):
find /tmp -name "*.old" -ok rm {} \;











