GLOBIGNORE='**/dont_doc/**' 不起作用!

GLOBIGNORE='**/dont_doc/**' 不起作用!

我想创建一个 glob 表达式来忽略dont_doc目录中的任何文件,但是当我尝试使用 usingGLOBIGNORE来执行此操作时,它不起作用:

$ GLOBIGNORE='**/dont_doc/**'
$ echo dont_doc/**
dont_doc/customBlockHelpers.hbs.js dont_doc/RoClasses.js dont_doc/RoEnums.js dont_doc/RoModules.js dont_doc/RoTypes.js

这就是我想要发生的事情:

dont_doc/doc.js #Fail
dont_doc/lol/doc.js #Fail
lol/dont_doc/doc.js #Fail
lol/dont_doc/lol/doc.js #Fail
lol.js #Succsed
index.html #Fail
oof/lol.js #Succsed

我该如何解决?

编辑:我也想忽略该node_modules文件夹

答案1

尝试使用:

GLOBIGNORE='dont_doc:*/dont_doc:dont_doc/*:*/dont_doc/*'

请注意,它不会停止bash查看这些目录,它只是从全局扩展中删除与这些模式匹配的条目。所以这里我们有 4 种以 分隔的模式:,一种单独排除dont_doc,一种排除以 结尾的模式/dont_doc,一种排除以 开头的模式dont_doc/,最后一种排除包含 的模式/dont_doc/

它类似于操作员在(如)~中所做的事情zsh -o extendedglobprint -rC1 -- **/*~(|*/)dont_glob(/*|)

在 ksh93 中,您只需要FIGNORE=dont_doc忽略dont_doc目录条目即可。与zsh -o extendedglob此类似(^dont_glob/)#^dont_glob,但要注意,在 中ksh93,设置FIGNORE也会禁用隐藏以 . 开头的文件名.

请注意,仅当您启用启用 zsh 样式递归通配符的选项时,这才**有意义。globstar

如果您在( )extglob中打开该选项,则 ksh 的扩展 glob 运算符的子集将变得可用,并且您可以将该模式缩短为:bashshopt -s extglob

GLOBIGNORE='?(*/)dont_glob?(/*)'

或者排除多个目录:

GLOBIGNORE='?(*/)@(dont_glob|node_modules)?(/*)'

相关内容