Glob case-insensitive em zsh / bash
Pergunta
Eu preciso listar todos os arquivos cujos nomes começam com 'SomeLongString'. Mas o caso de 'SomeLongString' pode variar. Como?
Eu estou usando zsh, mas uma solução bash é também bem-vindos.
Solução
ZSH:
$ unsetopt CASE_GLOB
Ou, se você não quiser habilitar case-insensitive englobamento em geral, você pode ativá-lo apenas para a parte variando:
$ print -l (#i)(somelongstring)*
Isso irá corresponder a qualquer arquivo que começa com "somelongstring" (em qualquer combinação de letras minúsculas / superior). A bandeira de maiúsculas e minúsculas se aplica para tudo entre parênteses e pode ser usado várias vezes. Leia o zshexpn(1)
manual para mais informações.
Atualizar Quase esqueci, você tem que permitir extendend englobamento para que isso funcione:
setopt extendedglob
Outras dicas
bash:
shopt -s nocaseglob
Dependendo o quão profundo você quer ter este perfil, ofertas find
bastante
a este respeito:
find . -iname 'SomeLongString*' -maxdepth 1
Isso só vai dar-lhe os arquivos no diretório atual. Importante aqui é
o parâmetro -iname
vez de -name
.
$ function i () {
> shopt -s nocaseglob; $*; shopt -u nocaseglob
> }
$ ls *jtweet*
ls: cannot access *jtweet*: No such file or directory
$ i ls *jtweet*
JTweet.pm JTweet.pm~ JTweet2.pm JTweet2.pm~