Чувствительный к регистру Glob на zsh / bash - PullRequest
33 голосов
/ 01 октября 2008

Мне нужно перечислить все файлы, имена которых начинаются с SomeLongString. Но случай SomeLongString может отличаться. Как?

Я использую zsh, но приветствуется и решение bash.

Ответы [ 4 ]

31 голосов
/ 01 октября 2008

Баш:

shopt -s nocaseglob
27 голосов
/ 01 октября 2008

ЗШ:

$ unsetopt CASE_GLOB

Или, если вы не хотите включать глобализацию без учета регистра вообще, вы можете активировать ее только для изменяющейся части:

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

Это будет соответствовать любому файлу, начинающемуся с «somelongstring» (в любой комбинации строчных и прописных букв). Флаг без учета регистра применяется для всего, что находится в скобках, и может использоваться несколько раз. Прочтите руководство zshexpn(1) для получения дополнительной информации.

UPDATE Чуть не забыл, чтобы включить эту функцию, необходимо включить глобирование расширений:

setopt extendedglob
13 голосов
/ 01 октября 2008

В зависимости от того, насколько глубоко вы хотите иметь этот список, find предлагает довольно много в связи с этим:

find . -iname 'SomeLongString*' -maxdepth 1

Это даст вам только файлы в текущем каталоге. Здесь важно параметр -iname вместо -name.

3 голосов
/ 01 октября 2011

$ 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~
...