Você não pode ter um /
no @(...)
, !(...)
, *(...)
...
O /
só pode aparecer entre globs, até a[x/y]b
é tratado como @(a\[x)/@(y\]b)
. Os globs são primeiro divididos em /
e cada parte corresponde ao conteúdo de um diretório. Quando há x(...)
ksh glob extensions, no entanto, não há divisão na /
que está dentro da (...)
, mas cada parte da glob ainda é comparada aos nomes dos arquivos. Em !(*/*)
, */*
é comparado com cada nome de arquivo no diretório atual. Obviamente, nenhum nome de arquivo pode conter um /
, então não corresponde a nada, então !(*/*)
corresponde a cada arquivo.
Aqui, você deseja usar zsh
e seus qualificadores glob:
echo *(^/)
Para os arquivos de qualquer tipo, exceto o diretório. Ou para ser o oposto de bash
*/
(que é qualquer arquivo do tipo diretório após a resolução do link simbólico ):
echo *(-^/)
(arquivos que não são diretórios nem links simbólicos para diretórios).