ls não corresponde a nomes de arquivos (a menos que você queira considerar extensões do GNU como --include / --exclude ). São os globs de shell normalmente usados para isso.
ls -ld [[:alpha:]][[:alpha:]]*e*[[:alpha:]]
localizaria arquivos que correspondam a esses requisitos, mas perderia ee , por exemplo. Você poderia fazer:
zsh
Usando o operador AND NOT / EXCEPT ( ~ ) e NOT ( ^ ):
setopt extendedglob
ls -ld [[:alpha:]](#c2)*~^*e*~^*[[:alpha:]]
Ou usando os operadores de expressões regulares perl -like look ahead:
setopt rematchpcre
match() [[ $REPLY =~ '^(?=.*e)(?=.*[[:alpha:]]$)[[:alpha:]][[:alpha:]]' ]]
ls -ld *(+match)
ksh93
Usando & dentro de @(...) :
ls -ld @([[:alpha:]][[:alpha:]]*&*e*&*[[:alpha:]])
Mesmo com suas expressões regulares aumentadas (ativadas com ~(X:...) ):
ls -ld ~(X:[[:alpha:]][[:alpha:]].*&.*e.*&.*[[:alpha:]])
Ou usando operadores de look-ahead tipo perl:
ls -ld ~(P:(?=.*e)(?=.*[[:alpha:]]$)[[:alpha:]][[:alpha:]])*
bash
bash não tem operador AND , mas suporta um subconjunto de operadores de ksh quando a opção extglob está ativada, pelo que pode fazer coisas como:
shopt -s extglob
ls -ld @([[:alpha:]]?([[:alpha:]]*)e?(*[[:alpha:]])|e[[:alpha:]]?(*[[:alpha:]]))
@(x|y) (como zsh ' (x|y) ) é um operador OR . ?(x) é uma x opcional (como zsh ' (x|) ; @(x|) também funcionaria para isso em ksh / bash ).
Outro truque é usar o fato de que "A e B" é "não (não (A) ou não (B))" , e o subconjunto de Os ksh globs suportados por bash , por isso, incluem operadores não e ou para que você possa fazer:
ls -ld !(!([[:alpha:]][[:alpha:]]*)|!(*e*)|!(*[[:alpha:]]))
Esses também funcionam em ksh (todas as variantes, não há shopt ) de onde esses operadores vêm, em primeiro lugar.
Abordagens não baseadas em glob
com find :
find . ! -name . -prune -name '[[:alpha:]][[:alpha:]]*' \
-name '*e*' \
-name '*[[:alpha:]]' -exec ls -ld {} +
(cuidado, a lista de arquivos não será ordenada e os nomes de arquivos contendo bytes que não formam caracteres válidos serão excluídos; os nomes dos arquivos também serão prefixados com ./ ).