Мне нужно указать все файлы, чьи имена начинаются с 'SomeLongString'. Но случай «SomeLongString» может отличаться. Как?Нечувствительный к регистру Glob на zsh/bash
Я использую zsh, но решение bash также приветствуется.
Мне нужно указать все файлы, чьи имена начинаются с 'SomeLongString'. Но случай «SomeLongString» может отличаться. Как?Нечувствительный к регистру Glob на zsh/bash
Я использую zsh, но решение bash также приветствуется.
ЗШ:
$ unsetopt CASE_GLOB
Или, если вы не хотите, чтобы включить регистронезависимую подстановку в целом, вы можете активировать его только меняющуюся часть:
$ print -l (#i)(somelongstring)*
Это будет соответствовать любому файлу, начинающемуся с «somelongstring» (в любой комбинации нижнего/верхнего регистра). Флаг, не учитывающий регистр, применяется ко всему между круглыми скобками и может использоваться несколько раз. Прочтите руководство пользователя zshexpn(1)
для получения дополнительной информации.
UPDATE Почти забыл, вы должны включить extendend подстановку для этого работы:
setopt extendedglob
В зависимости от того, насколько глубоко вы хотите, чтобы этот список, find
предлагает довольно много в этой связи:
find . -iname 'SomeLongString*' -maxdepth 1
Это даст вам только файлы в текущем каталоге. Важным здесь является параметр -iname
вместо -name
.
Баш:
shopt -s nocaseglob
Спасибо. Я надеялся, что есть способ указать его как часть самого глоба. В руководстве zsh упоминается что-то подобное, но я не мог понять это. – 2008-10-01 10:15:39
$ 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~
BTW, мне пришлось установить EXTENDED_GLOB, чтобы он работал. – 2008-10-02 06:56:55
Как насчет `setopt no_CASE_GLOB`? – ksoo 2014-01-18 18:24:00