Glob senza distinzione tra maiuscole e minuscole su zsh / bash
Domanda
Devo elencare tutti i file i cui nomi iniziano con 'SomeLongString'. Ma il caso di 'SomeLongString' può variare. Come?
Sto usando zsh, ma anche una soluzione bash è benvenuta.
Soluzione
ZSH:
$ unsetopt CASE_GLOB
Oppure, se non si desidera abilitare il globbing senza distinzione tra maiuscole e minuscole in generale, è possibile attivarlo solo per la parte variabile:
$ print -l (#i)(somelongstring)*
Questo corrisponderà a qualsiasi file che inizia con " somelongstring " (in qualsiasi combinazione di lettere minuscole / maiuscole). Il flag senza distinzione tra maiuscole e minuscole si applica a tutto tra parentesi e può essere utilizzato più volte. Leggi il manuale zshexpn (1)
per maggiori informazioni.
Aggiorna Quasi dimenticato, devi abilitare extend globbing affinché funzioni:
setopt extendedglob
Altri suggerimenti
bash:
shopt -s nocaseglob
A seconda della profondità con cui si desidera avere questo annuncio, trova
offre parecchio
a questo proposito:
find . -iname 'SomeLongString*' -maxdepth 1
Questo ti darà solo i file nella directory corrente. Importante qui è
il parametro -iname
anziché -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~