Подтвердить что ты не робот

Нечувствительный к регистру Glob на zsh/bash

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

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

4b9b3361

Ответ 1

ЗШ:

$ unsetopt CASE_GLOB

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

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

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

UPDATE Почти забыл, что вам нужно включить расширенное globbing для этого:

setopt extendedglob

Ответ 2

bash:

shopt -s nocaseglob

Ответ 3

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

find . -iname 'SomeLongString*' -maxdepth 1

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

Ответ 4


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