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

如何用Glob模式匹配assets目录下除i18n外的所有内容

关于Glob模式排除i18n文件夹的问题

你用的dist/assets/!(i18n)/**模式兼容性有限,且存在遗漏场景,具体分析和可行方案如下:

原模式的问题

  1. 语法支持限制:!(i18n)属于Glob扩展语法(extglob),不是所有工具都默认支持。比如Bash需要先执行shopt -s extglob开启扩展匹配,Node.js的glob库需要手动设置extglob: true选项,否则这个模式会被当作普通字符串解析,完全达不到排除效果。
  2. 遗漏根级文件:这个模式只匹配dist/assets下非i18n子目录里的所有内容,如果dist/assets下存在直接的文件(不是在子目录中),这些文件会被漏掉。

可靠实现方案

方案1:通用排除法(推荐,兼容性最好)

大多数支持Glob的工具(包括webpack、rollup、Node.js glob、Git等)都支持排除模式,用「匹配全部+排除目标」的组合,无需依赖扩展语法:

  • 主匹配模式:dist/assets/**(匹配dist/assets下所有内容)
  • 排除模式:!dist/assets/i18n/**(排除i18n文件夹及其所有子内容)

举几个场景的用法:

  • Node.js glob库:
    const glob = require('glob');
    glob('dist/assets/**', { ignore: 'dist/assets/i18n/**' }, (err, files) => {
      // files会包含除i18n之外的所有内容
    });
    
  • Bash中用find命令替代(无需依赖extglob):
    find dist/assets -path "*/i18n/*" -prune -o -print
    

方案2:启用扩展语法并修正模式

如果一定要用扩展语法,需要先确保工具支持,然后修正模式以覆盖根级文件:

  • 修正后的模式:dist/assets/!(i18n){,/**}
    • !(i18n)匹配dist/assets下除i18n之外的直接子项(文件/目录)
    • {,/**}递归匹配子项的所有内容

比如在开启extglob的Bash中使用:

shopt -s extglob
ls dist/assets/!(i18n){,/**}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:35:18