Вопрос

Мне нужно перечислить все файлы, имена которых начинаются с «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~
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top