2008-10-01 9 views

Répondre

25

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 
+4

BTW, je devais setopt EXTENDED_GLOB pour que cela fonctionne. –

+0

Qu'en est-il de 'setopt no_CASE_GLOB'? – ksoo

10

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.

25

bash:

shopt -s nocaseglob 
+0

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. –

1

$ 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~ 
+0

** 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. –

Questions connexes