Você precisa incluir o diretório na exceção: print -l foo/*~foo/type_A*
ou print -l foo/*~{foo/type_A*}
.
Se você quiser, pode substituir o diretório por um curinga:
print -l foo/*~*/type_A*
Digamos que eu tenha os seguintes arquivos:
|-- bar '-- foo |-- type_A_1 |-- type_A_2 |-- type_B_1 |-- type_B_2 |-- type_B_xx |-- type_B_xx '-- something_else
Eu achei o seguinte comando
print -l foo/*~{type_B*}
imprime tudo em foo
exceto coisas que começam com type_B
, mas não, em vez disso, imprime tudo em foo:
foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else
Eu também tentei print -l foo/*~type_B
e consegui a mesma coisa.
Como o curinga% da exceção~
funciona no zsh?
zsh tem o operador ^
glob quando o EXTENDED_GLOB está ativado. Parece o ajuste perfeito para a sua situação declarada:
setopt extendedglob
print -rl foo/^type_A*
Significa "corresponder a qualquer coisa, exceto o que corresponde ao seguinte padrão", mas seu efeito é limitado à parte do padrão entre barras, ou entre o início do padrão e a primeira barra, ou (como neste caso) entre a última barra e o fim do padrão.
Você pode visualizar as opções zsh ativadas atualmente com:
setopt
E desative EXTENDED_GLOB com:
unsetopt extendedglob
Tags zsh wildcards shell-script