J'ai besoin de lister tous les fichiers dont le nom commence par 'SomeLongString'. Mais le cas de 'SomeLongString' peut varier. Comment?Glob-insensible à la casse sur zsh/bash
J'utilise zsh, mais une solution bash est également la bienvenue.
J'ai besoin de lister tous les fichiers dont le nom commence par 'SomeLongString'. Mais le cas de 'SomeLongString' peut varier. Comment?Glob-insensible à la casse sur zsh/bash
J'utilise zsh, mais une solution bash est également la bienvenue.
ZSH:
$ unsetopt CASE_GLOB
Ou, si vous ne voulez pas activer les jokers insensible à la casse en général, vous pouvez l'activer pour que la partie variable:
$ print -l (#i)(somelongstring)*
Ceci correspondra à tout fichier commençant par "somelongstring" (dans n'importe quelle combinaison de majuscules/minuscules). Le drapeau insensible à la casse s'applique à tout entre les parenthèses et peut être utilisé plusieurs fois. Lisez le manuel zshexpn(1)
pour plus d'informations.
MISE À JOUR Presque oublié, vous devez activer les jokers pour cette Direction générale élargie au travail:
setopt extendedglob
Selon la profondeur que vous voulez avoir cette liste, find
offre beaucoup à cet égard:
find . -iname 'SomeLongString*' -maxdepth 1
Cela vous donnera uniquement les fichiers dans le répertoire courant. Important ici est le paramètre -iname
au lieu de -name
.
bash:
shopt -s nocaseglob
Merci. J'espérais qu'il y avait un moyen de le spécifier comme faisant partie du glob lui-même. Le manuel de zsh mentionne quelque chose comme ça mais je n'ai pas réussi à le comprendre. –
$ 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~
** Vous devez citer le glob pour le transmettre à la fonction en toute sécurité **. Si '* jtweet *' correspond à quelque chose, il sera étendu avant que la fonction ne le voit. (Ou erreur ou chaîne vide en fonction d'autres paramètres 'shopt'). Idée intéressante, cependant. Je pense que cela fonctionnera surtout si vous lancez 'i ls '* jtweet *'', même s'il y a aussi un 'jtweet.pm dans le répertoire. Il y a beaucoup de problèmes potentiels avec des espaces ou d'autres caractères spéciaux dans les args non-glob, ou dans le glob, cependant. –
BTW, je devais setopt EXTENDED_GLOB pour que cela fonctionne. –
Qu'en est-il de 'setopt no_CASE_GLOB'? – ksoo