Globos insensibles a mayúsculas y minúsculas en zsh / bash
Pregunta
Necesito enumerar todos los archivos cuyos nombres comiencen con 'SomeLongString'. Pero el caso de 'SomeLongString' puede variar. ¿Cómo?
Estoy usando zsh, pero una solución de bash también es bienvenida.
Solución
ZSH:
$ unsetopt CASE_GLOB
O, si no desea habilitar el uso de globos de manera que no distingan mayúsculas y minúsculas en general, puede activarlo solo para la parte variable:
$ print -l (#i)(somelongstring)*
Esto coincidirá con cualquier archivo que comience con " somelongstring " (en cualquier combinación de mayúsculas / minúsculas). El indicador que distingue entre mayúsculas y minúsculas se aplica a todo entre paréntesis y se puede utilizar varias veces. Lea el manual zshexpn (1)
para obtener más información.
ACTUALIZACIÓN Casi lo olvido, tiene que habilitar la extensión de espacios para que esto funcione:
setopt extendedglob
Otros consejos
bash:
shopt -s nocaseglob
Dependiendo de la profundidad con la que desee tener esta lista, find
ofrece bastante
en este sentido:
find . -iname 'SomeLongString*' -maxdepth 1
Esto solo le dará los archivos en el directorio actual. Importante aquí es
el parámetro -iname
en lugar 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~