首页/系统/Linux 运维命令速查/find 按名称匹配(-name/-iname/-path)
文件与目录76 条

find 按名称匹配(-name/-iname/-path)

-name 匹配文件名的最后一段,-iname 忽略大小写;匹配完整路径用 -path,组合排除用 -not。

Linux 运维命令速查系统更新于 2026-10-13

按名称匹配是什么

find 的 -name 匹配的是文件名的最后一段,也就是 basename;想匹配完整路径要用 -path。-iname 在比较时忽略大小写。两者都接受通配符,模式必须加引号,否则会被 shell 提前展开——那时 find 收到的模式就取决于当前目录里恰好有哪些文件。

基本信息

适用平台Linux、Unix 通用;自定义输出等属于 GNU find 扩展
命令语法find 路径 [附加条件] -name '模式'
匹配对象-name 与 -iname 匹配文件名最后一段;-path 匹配完整路径
通配符星号、问号与方括号,必须用引号包住

典型使用场景

  • 按扩展名找文件:批量处理某类配置或数据文件
  • 命名风格不统一时忽略大小写查找
  • 组合条件:目录名含某关键字且文件名匹配某模式
  • 排除指定文件:用取反条件把不需要的剔除
  • 与执行动作组合,找到后统一处理

常用示例

常用示例
find /var/www -name '*.php'
find . -iname 'readme*'
find /data -path '*conf*' -name '*.yml'
find /etc -name '*.conf' -not -name '*.d/*'
find . -maxdepth 2 -name '*.log' -size +100M

条件对照

条件匹配对象说明
-name文件名最后一段区分大小写
-iname文件名最后一段忽略大小写
-path完整路径字符串用来限定所在目录
取反条件对条件取反用于排除
-maxdepth限制递归层数与目录结构配合使用
-regex整个路径的正则方言差异大,日常少用
模式一定要加引号:不加时 shell 会先按当前目录展开一次,find 收到的模式就取决于目录里恰好有哪些文件,结果无法复现。
想匹配路径用 -path,写成 -name 再带斜杠永远匹配不上;两者可以叠加,用来做「目录含关键字且文件名符合模式」的组合过滤。
限制搜索深度能明显提速:只关心当前目录下的文件时用 -maxdepth 1,避免无谓地递归整棵目录树,尤其是文件数量很大的目录。

限定搜索范围

选项作用注意
-maxdepth N限制向下搜索层数全局选项,位置有要求
-mindepth N跳过前 N 层只处理固定层级时有用
-type f只匹配普通文件避免目录混入结果
-print0以空字符分隔输出配合 xargs -0 处理怪文件名
-iname忽略大小写匹配折叠规则受 locale 影响
-name 的模式只匹配路径的最后一段,不跨越路径分隔符,所以 -name 'a/b' 永远不会命中,涉及中间目录要用 -path。忽略大小写用 -iname,但它的折叠规则随语言环境变化,同一台机器换个 LANG 就可能匹配到不同结果。

易错点

  • 模式不加引号导致 shell 提前展开,结果随当前目录内容变化
  • 用 -name 去匹配路径永远失败,路径条件要用 -path
  • -regex 匹配整条路径且正则方言差异大,日常优先用组合条件
  • 文件名含空格或特殊字符时,后续处理要用空字符分隔而不是换行
  • 忘记加类型过滤会把目录也算进来,后面接删除动作时后果不同
  • -maxdepth 是全局选项,要写在路径之后、其他条件之前;写在条件之后 GNU find 会给出警告且行为不再可靠,排查时容易误以为条件没生效

数据来源与参考

  • man 1 find(GNU findutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌