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

如何使用find命令实现带可选模式的Fortran文件扩展名匹配

匹配典型Fortran扩展名文件的find正确写法

find的-name参数使用标准shell glob通配符做匹配,该规则下?的语义是必须匹配恰好1个任意字符,没有正则表达式中「匹配0次或1次(可选)」的作用。你之前写的*.[Ff][0-9Oo]?[0-9Rr]?会强制要求点号后面至少有3个字符,既无法匹配单字符的.f/.F扩展名,还可能误匹配不符合规则的无关文件。

下面提供两种可正常工作的写法:

方案1:全版本兼容写法(推荐)

使用-o(逻辑或)拼接不同长度的扩展名匹配规则,符合POSIX标准,所有版本的find都可以正常运行,不会出现兼容性问题。
如果需要严格匹配你列出的所有固定扩展名,不额外匹配其他Fortran相关后缀,直接使用如下命令即可:

find . -type f \( \
  -name "*.f" -o -name "*.F" \
  -o -name "*.for" -o -name "*.FOR" \
  -o -name "*.f90" -o -name "*.F90" \
  -o -name "*.f95" -o -name "*.F95" \
  -o -name "*.f03" -o -name "*.F03" \
  -o -name "*.f08" -o -name "*.F08" \
  -o -name "*.f15" -o -name "*.F15" \
  -o -name "*.f18" -o -name "*.F18" \
\)

参数说明:

  • 命令中的\(和\)用于对逻辑或条件做分组,避免和find默认的逻辑与规则冲突
  • -type f表示仅匹配普通文件,会自动过滤目录、软链接等特殊文件,不需要该限制可以直接删除
  • 如果你不需要严格限定后缀列表,希望覆盖所有f/F+两位数字格式的现代Fortran扩展名,可以把多个数字后缀的匹配项简化为-name "*.[Ff][0-9][0-9]"

方案2:GNU find 简洁正则写法

如果你使用的是Linux系统默认的GNU版本find,可以通过-regex参数使用扩展正则匹配,写法更简洁,原生支持可选匹配语义:

find . -type f -regextype posix-extended -regex ".*\.[Ff]([Oo][Rr]|[0-9]{2})?$"

正则规则说明:

  • .*匹配文件路径前半部分的任意字符
  • \.[Ff]匹配后缀的点号和大小写F
  • ([Oo][Rr]|[0-9]{2})?表示后缀在F/f之后的部分是可选的,匹配内容要么是大小写组合的or(对应for/FOR),要么是两位数字(对应f90、f03这类数字后缀)
  • $匹配路径结尾,避免误匹配扩展名更长的无关文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:51:26