Ah - você quer procurar em um ordenamento léxico. Use isto:
ls | awk '$1 >= "c3" && $1 <= "f" {print;}'
Por exemplo, se meu diretório contiver arquivos a, b, c, c1, c2, c3, c4, d, e, f, g
Existe um comando como o seguinte pseudo-código
ls -filename > "c2"
que listaria apenas os arquivos c3, c4, d, e, f
EDITAR: Pergunta modificada para abordar um caso mais geral
No bash, você pode fazer algo como:
$ ls [d-f] *
Ou você pode escrever um script de shell.
Usando expressões regulares:
ls | egrep "[d-z].*"
Este é geralmente o caso de solicitações estranhas como a sua. Você está pedindo para fazer algo que é muito incomum e envolve a compreensão da estrutura lexical dos nomes de diretório.
Aprenda expressões regulares em: regular-expressions.info
e digite:
man grep
Para ler a página de manual de grep
.
Usando o comando grep, você pode fazer qualquer tipo de filtragem necessária. Semelhante ao comando FIND no Windows. Abaixo está uma opção. Se você deseja obter uma listagem completa, como o que obtém com "ls -l", talvez seja necessário combinar isso com o AWK.
> ls -1 | grep ^[def]
Ao longo das linhas da resposta anterior:
use a expansão de nome de arquivo do shell em vez de usar o egrep:
ls [d-z]*
ls | grep -A 1000000 '^ c2 $' | cauda -n +2
O grep fornece a linha correspondente e o próximo milhão; a cauda corta a primeira linha.
Se você quiser uma versão longa, adicionar "| xargs ls -l" ao final funcionaria.
Limitações: isso não funcionará bem com nomes de arquivos interessantes (especialmente nomes de arquivos com novas linhas, mas pode ter problemas com espaços, caracteres de controle etc.). E não funcionará se você tiver mais de um milhão de arquivos no diretório.
Não é a resposta definitiva, mas isso deve funcionar.
ls -1 | while read f ; do [[ "$f" > "g2" ]] && echo $f ; done
Poderia ser mais evoluído usando "$ (echo $ f | tr [A-Z] [a-z])" para ignorar o caso. Isso funciona apenas para strings ASCII, ele não poderá ordenar nomes de arquivos Unicode (ou iso- *)