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

Bash For循环排除特定后缀文件:为何我的命令无法生效?

问题分析与解决方法

你的错误在于用了不符合Bash规则的通配符写法,*![.en].mp4里的!和[.en]会被当成普通字符处理,根本起不到排除*.en.mp4文件的作用,所以命令无法正常工作。

下面给你两种可行的解决方式:

方法一:使用Bash扩展通配符(extglob)

Bash的扩展通配符支持排除类匹配,不过需要先确认功能是否开启:

  • 检查状态:运行shopt extglob,如果输出extglob off,就执行shopt -s extglob开启它。
  • 修正后的循环命令:
for file in /home/ubuntu/discovery/download/!(*.en).mp4; do
    # 在这里添加你要执行的操作,比如打印文件名
    echo "$file"
done

!(*.en).mp4的逻辑是:匹配所有以.mp4结尾,但文件名末尾部分不是.en的文件,刚好能排除掉*.en.mp4格式的目标文件。

方法二:普通循环加条件判断

如果不想启用扩展通配符,可以先遍历所有.mp4文件,再通过条件过滤掉不需要的文件:

for file in /home/ubuntu/discovery/download/*.mp4; do
    if [[ "$file" != *.en.mp4 ]]; then
        # 执行你的操作
        echo "$file"
    fi
done

这个逻辑很直观:先获取所有.mp4文件,再跳过那些以.en.mp4结尾的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:33:21