You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用bash find命令通过单个-name模式匹配多个指定文件名?

使用单个模式匹配指定文件名的find命令写法

嘿,我明白你想简化find命令,用单个模式替代一堆-name参数的需求。这里得先理清一个关键点:find的-name选项用的是shell glob通配符,而glob本身不支持直接的“或”逻辑来匹配多个精确文件名。不过有两种靠谱的方法能实现你要的效果:

方法1:用-regex实现单个正则模式匹配

这是最直接满足你“单个模式”需求的方案,因为find的-regex支持正则表达式的“或”逻辑。比如你要匹配的那几个文件,可以这么写:

find . -type f -regex './\(fname1\.jpg\|fname2\.png\|myfile\.css\|example\.gif\)'

解释下细节:

  • ./是因为find默认会把匹配的路径写成相对当前目录的格式(比如./fname1.jpg),所以正则得带上这个前缀才能匹配
  • \( ... \)是正则的分组语法,\|用来分隔不同的文件名(注意在基础正则里需要转义)
  • 每个文件名里的.要转义成\.,因为正则里的.默认匹配任意字符,不转义会出错

如果你用的是GNU find(大部分Linux发行版默认都是),还可以切换到扩展正则模式,写法更简洁:

find . -type f -regextype posix-extended -regex './(fname1\.jpg|fname2\.png|myfile\.css|example\.gif)'

这里不需要转义括号和竖线,可读性高很多。

方法2:用shell括号扩展(语法糖式简化)

如果你非要纠结用-name,可以借助bash的括号扩展让shell帮你生成多个-name参数,但这其实只是语法糖,本质还是多个-name参数的变形:

find . -type f -name @(fname1.jpg|fname2.png|myfile.css|example.gif)

不过这个需要先开启bash的extglob扩展(一般默认是开启的,如果没开可以用shopt -s extglob临时开启)。

总结

如果你的核心需求是用一个模式字符串完成匹配,那-regex是最优解;如果只是想少写几个-name参数,shell的extglob扩展也能凑合用,但本质还是多参数的变形。

内容的提问来源于stack exchange,提问作者Simone Bonelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:02:21