find 命令中通配符默认区分大小写,推荐用 -iname 实现不区分大小写的匹配,如 find /path -iname "readme.md";-iregex 适用于复杂正则需求;避免用 shell 层面冗长模拟或 grep -i 替代,因功能受限且易出错。

在 Linux 的 find 命令中,通配符(如 *、?、[...])本身是区分大小写的,不能直接实现不区分大小写的匹配。但可以通过组合其他工具或使用 find 的特定选项来达成目标。
用 -iname 替代 -name
-iname 是 find 内置的大小写不敏感匹配选项,最简单可靠的方式:
-
find /path -iname "readme.md"→ 匹配README.MD、Readme.md、READme.Md等 -
find . -iname "*.log"→ 匹配app.LOG、error.Log、ACCESS.log - 支持通配符:
-iname "file[0-9].txt"也忽略大小写
用 -regex 配合大小写忽略标志
如果需要更复杂的模式(比如正则表达式),可用 -regex 加 -iregex(注意:部分旧版 find 可能不支持 -iregex,推荐用 GNU find):
-
find . -iregex ".*\.\(txt\|md\)$"→ 匹配任意路径下以 .txt 或 .md 结尾的文件(忽略大小写) - 注意:GNU find 默认使用 Emacs 正则语法,需转义括号和竖线;也可加
-regextype posix-extended启用扩展语法
结合 shell glob 和 find 的局限性
不要依赖 shell 层面的通配符(如 find . -name "*[rR][eE][aA][dD][mM][eE]*")来模拟不区分大小写:
- 写法冗长、易出错,且无法覆盖所有大小写组合(如 6 字母就有 64 种组合)
- 对 Unicode 或非 ASCII 字符无效,也不适用于长文件名或嵌套层级多的情况
- 仅在极简场景下可临时用,不推荐作为常规方案
配合 grep 实现灵活过滤(备用方案)
当 find 选项不够用时,可将结果交给 grep -i 过滤:
-
find . -type f | grep -i "\.log$"→ 查找所有 .log 文件(忽略大小写) - 注意:此方式不保留 find 的完整功能(如 -exec、-mtime 等),且路径含空格时需额外处理(加
-print0 | xargs -0) - 适合快速筛选,不适合后续执行操作的复杂流程

















