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

Bash循环中如何添加_CN_模式,实现指定文件的筛选遍历?

修改后的代码
shopt -s dotglob extglob nullglob globstar

for imfiles in "$dir"**/@(*-DT-*!(*.jpg)|*_CN_*!(*.jpg)|*.fff); do
   printf "File processed: %s\n" "$imfiles"
done
代码解释

前置选项说明

  • shopt -s dotglob:让通配符匹配以.开头的隐藏文件
  • shopt -s extglob:开启Bash扩展通配符模式,支持@()「或匹配」、!()「非匹配」等高级语法
  • shopt -s nullglob:如果通配符没有匹配到任何文件,返回空列表,避免循环错误地把通配符字符串当作文件名处理
  • shopt -s globstar:允许**递归匹配指定目录下的所有子目录(包括目录本身)

核心通配符模式分解

"$dir"**/@(*-DT-*!(*.jpg)|*_CN_*!(*.jpg)|*.fff) 是匹配逻辑的核心,拆分为三部分:

  1. *-DT-*!(*.jpg):匹配**包含-DT-字符串且不是.jpg**的文件
    • *-DT-*:确保文件名中存在-DT-子串,不管它在文件名的开头、中间还是结尾
    • !(*.jpg):排除所有以.jpg结尾的文件,避免误匹配带-DT-的JPG文件
  2. *_CN_*!(*.jpg):匹配**包含_CN_字符串且不是.jpg**的文件,逻辑和上面完全一致
  3. *.fff:匹配所有以.fff结尾的文件,这类文件本身不属于JPG,无需额外排除

额外优化

把原代码中的${imfiles}改成%s并将"$imfiles"作为printf的参数,是更安全的写法——如果文件名包含特殊字符(比如空格、换行符),能避免格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:35:24