Observe que não é ls
que interpreta esses globs. Esses globs são expandidos pelo shell em uma lista de nomes de arquivos que são passados como argumentos para ls
. Conchas diferentes têm diferentes capacidades de globbing. bash
tem algumas extensões sobre globs padrão (emprestado de ksh88
e ativado com shopt -s extglob
), mas ainda é limitado em comparação com shells como zsh
ou ksh93
.
com zsh
:
setopt extendedglob
ls -d [[:alnum:]](#c5)
ksh93
:
ls -d {5}([[:alnum:]])
ou:
ls -d {5}(\w) # (\w includes underscore in addition to alnums)
ou, se você quiser usar expressões regulares estendidas:
ls -d ~(E)^[[:alnum:]]{5}$
Com bash
ou outros shells POSIX que não possuem operadores globbing equivalentes, você precisa fazer:
ls -d [[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]]
Observe que [[:alnum:]]
inclui qualquer caractere alfabético na localidade atual (não apenas alfabetos latinos e muito menos o inglês) e 0123456789
(e possivelmente outros tipos de dígitos). Se você quiser as letras no alfabeto Inglês, nomeie os caracteres individualmente:
c='[0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]'
unset -v IFS
ls -d $c$c$c$c$c
Ou use o idioma C:
(export LC_ALL=C
ls -d [[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]])