Glob без учета регистра в zsh/bash
Вопрос
Мне нужно перечислить все файлы, имена которых начинаются с «SomeLongString».Но случай SomeLongString может отличаться.Как?
Я использую zsh, но решение bash также приветствуется.
Решение
ЗШ:
$ unsetopt CASE_GLOB
Или, если вы не хотите вообще включать подстановку без учета регистра, вы можете активировать ее только для меняющейся части:
$ print -l (#i)(somelongstring)*
Это будет соответствовать любому файлу, который начинается с «somelongstring» (в любой комбинации нижнего/верхнего регистра).Флаг нечувствительности к регистру применяется ко всему, что находится между круглыми скобками, и может использоваться несколько раз.Прочтите руководство zshexpn(1)
Чтобы получить больше информации.
ОБНОВЛЯТЬЧуть не забыл, чтобы это работало, вам нужно включить расширенное подстановку:
setopt extendedglob
Другие советы
баш:
shopt -s nocaseglob
В зависимости от того, насколько глубоко вы хотите разместить этот список, find
предлагает довольно много в этом отношении:
find . -iname 'SomeLongString*' -maxdepth 1
Это даст вам только файлы в текущем каталоге.Важно здесь -iname
параметр вместо -name
.
$ 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~