Atualmente, estou tentando percorrer um conjunto de diretórios, mas apenas os que me interessam.
$ ls -d */
cfdpost_statefiles/ p050L0260/ p050L0510/ p060L0390/ p070L0260/ p070L0510/ p092L0390/ p097L0260/ p110L0390/ p131L0325/ p150L0510/ profiles/
ERCOFTAC_TestSettings/ p050L0390/ p060L0260/ p060L0510/ p070L0390/ p084L0510/ p094L0325/ p100L0510/ p125L0510/ p136L0260/ p162L0260/ settings/
Eu quero combinar todos os p###*
diretórios, exceto aqueles que começam com p125
e p150
.
Se eu apenas fizer padrões com um pipe, recebo:
$ for dir in ./p(125|150)*(/); echo $dir
./p125L0510
./p150L0510
No entanto, se eu tentar usar o ^
que mostra na documentação :
$ for dir in ./p^(125|150)*(/); echo $dir
zsh: no matches found: ./p^(125|150)*(/)
Alguma ideia de como proceder?
As
EXTENDED_GLOB
opções precisam ser definidas para zsh.Para ver se foi definido, execute
setopt
para exibir as opções que foram definidas:Se não estiver definido, execute
setopt extended_glob
.NOTA: isso fará com que
~
,^
e#
não sejam expandidos.O problema no meu caso foi que, embora eu tenha definido essa opção no shell, eu estava executando o loop for em um script. O script inicia seu próprio shell para ser executado e, portanto, não tem a opção definida.
Para corrigir esse problema específico, coloque
setopt extendedglob
o próprio script.