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

Shell for循环如何同时匹配含指定字符串与指定扩展名的文件

实现方法

前置准备

你当前用的是Bash的扩展通配语法,首先要在脚本里开启必要的shell选项,否则递归匹配、扩展通配都不会正常生效,在循环前加一行:

shopt -s globstar extglob nullglob

三个选项的作用:

  • globstar:让**支持递归遍历所有层级的子目录
  • extglob:启用扩展通配,支持!()这类排除语法
  • nullglob:没有匹配到文件时通配符返回空值,不会把通配字符串本身当成文件名传入循环

修改后的遍历代码

直接用Bash的大括号展开语法,把两类文件的匹配规则并列写在通配位置即可,完整代码如下:

local dir imfiles
shopt -s globstar extglob nullglob

for imfiles in "$dir"/**/{*-DT-!(*.*),*.fff}; do
  # 跳过匹配到的目录,仅处理普通文件
  [[ -f $imfiles ]] || continue
  printf "File processed: %s\n" "$imfiles"
  # 后续添加你的文件处理逻辑即可
done

匹配规则说明

大括号内的两个模式分别对应你需要的两类文件:

  • *-DT-!(*.*):匹配文件名包含-DT-、且文件名里没有.的文件,也就是你说的无扩展名的-DT-文件,不会误匹配xxx-DT-xxx.jpg这类带后缀的文件
  • *.fff:匹配所有扩展名为.fff的文件

如果你需要的带-DT-文件不是完全无扩展名,只是要排除特定后缀(比如你原来代码里排除.jpg的逻辑),可以把!(*.*)替换成对应的排除规则,比如!(.jpg)就会匹配所有带-DT-、后缀不是.jpg的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:06:23