?[0-9]*
somente expande para nomes no diretório atual que tem um dígito como segundo caractere. ls
, ao obter um nome de diretório, mostrará obviamente o conteúdo desse diretório, o que significa que você terá que dizer ls
para não fazer isso.
Você faz isso com ls -d
:
ls -d -- ?[0-9]*
ou
ls -d ./?[0-9]*
O --
e ./
impedirá que ls
interprete o primeiro caractere do nome do arquivo como uma opção se começar com um traço.
Se você estiver interessado apenas em não-diretórios (e quiser também eliminar links simbólicos para diretórios), então há duas maneiras óbvias de se fazer isso.
-
Use um loop de shell, testando cada nome para ver se é um diretório ou não e exiba o nome, se não for:
for name in ?[0-9]*; do [ ! -d "$name" ] && printf '%s\n' "$name" done
Para incluir arquivos que começam com um ponto (arquivos ocultos), um shell pode ter uma opção
dotglob
shell que você pode definir antes do loop (shopt -s dotglob
inbash
). -
Use
find
para procurar por não diretórios (e eliminar links simbólicos para diretórios) no diretório atual:find -L . -maxdepth 1 ! -type d -name '?[0-9]*'
A opção
-L
parafind
faz com que-type d
se refira ao destino de qualquer link simbólico (se o nome do caminho atual for um link simbólico).