?[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" donePara incluir arquivos que começam com um ponto (arquivos ocultos), um shell pode ter uma opção
dotglobshell que você pode definir antes do loop (shopt -s dotglobinbash). -
Use
findpara 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
-Lparafindfaz com que-type dse refira ao destino de qualquer link simbólico (se o nome do caminho atual for um link simbólico).