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.

Foi útil?

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~
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top