2008-10-01 18 views

Odpowiedz

25

ZSH:

$ unsetopt CASE_GLOB 

Lub, jeśli nie chcesz, aby włączyć bez uwzględniania wielkości liter masek w ogóle, można go aktywować tylko dla różnej strony:

$ print -l (#i)(somelongstring)* 

To będzie pasować do każdego pliku, który zaczyna się od „somelongstring” (w dowolnej kombinacji dolnej/górnej przypadku). Flaga niewrażliwa na wielkość liter ma zastosowanie do wszystkiego między nawiasami i może być używana wiele razy. Przeczytaj instrukcję zshexpn(1), aby uzyskać więcej informacji.

UPDATE Prawie zapomniałem, trzeba włączyć extendend globbing za to do pracy:

setopt extendedglob 
+4

BTW, musiałem ustawić EXTENDED_GLOB, aby działał. –

+0

Co z 'setopt no_CASE_GLOB'? – ksoo

10

W zależności od tego, jak głęboko chcesz mieć tę listę, find oferuje sporo w tym względzie:

find . -iname 'SomeLongString*' -maxdepth 1 

To tylko daje pliki w bieżącym katalogu. Ważny tutaj jest parametr -iname zamiast -name.

25

bash:

shopt -s nocaseglob 
+0

Dzięki. Miałem nadzieję, że istnieje sposób na określenie go jako części globu. Podręcznik zsh wspomina coś takiego, ale nie byłem w stanie tego rozgryźć. –

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

** Musisz podać numer globu, aby przekazać go do funkcji bezpiecznie **. Jeśli '* jtweet *' pasuje do czegokolwiek, zostanie rozwinięte zanim funkcja go zobaczy. (Lub błąd lub pusty ciąg w zależności od innych ustawień 'shopt'). Interesujący pomysł. Myślę, że będzie działać głównie, jeśli uruchomisz 'i ls '* jtweet *'', nawet jeśli w katalogu znajduje się również 'jtweet.pm '. Istnieje wiele potencjalnych problemów ze spacjami lub innymi znakami specjalnymi w nie-globalnych argach lub w globach. –

Powiązane problemy