Existem vários métodos:
ls
apenas
ls lazer_??????
ls
e egrep
ls | egrep '^lazer_.{6}$'
find
find . -regextype posix-egrep -regex '^./lazer_.{6}$'
Em um diretório, tenho arquivos como
lazer_100506
lazer_100707
lazer_091211
lazer_110103
lazer_100406_temp
lazer_100622#delete
etc
Como posso obter uma listagem apenas dos quatro primeiros arquivos?
$ ls lazer_......
ls: lazer_......: No such file or directory
$
Como apontado por SiegeX , a Shell sozinha não entende expressões regulares .
Se você quiser um filtro preciso de seus arquivos, você deve usar expressões regulares e, portanto, usar um comando como egrep
.
Aqui, os arquivos que você deseja listar começam com lazer_
e são seguidos apenas por alguns dígitos (possivelmente mais ou menos que 6). Eu faria assim:
ls | egrep '^lazer_[[:digit:]]*$'
Esse regex funciona da mesma forma que '^lazer_[0-9]*$'
.
Expressões regulares com egrep
também lidam com a repetição como na resposta de wag , se você quiser restrinja sua lista a arquivos que terminem com exatamente 6 dígitos:
ls | egrep '^lazer_[[:digit:]]{6}$'
Com zsh
você pode usar um glob como ?(#cN)
(aqui o c
sinalizador exige que o ?
anterior corresponda exatamente a N
times):
setopt extendedglob
print -rl -- ?(#c12)
se você preferir ls
:
ls -d -- ?(#c12)
Você também pode adicionar qualificadores, por exemplo, pesquisar recursivamente por arquivos regulares com tamanho de nome fixo:
print -rl -- **/?(#c12)(.)
com ksh93
:
printf '%s\n' {12}(?)
para arquivos (não ocultos) cujo nome é composto de 12 caracteres.
Ou se você preferir expressões regulares:
printf '%s\n' ~(E)^.{12}$