




В зависимости от того, насколько глубоко вы хотите получить этот список, find предлагает довольно много
в этой связи:
find . -iname 'SomeLongString*' -maxdepth 1
Это даст вам только файлы в текущем каталоге. Здесь важно
параметр -iname вместо -name.
bash:
shopt -s nocaseglob
ZSH:
$ unsetopt CASE_GLOB
Или, если вы не хотите включать подстановку без учета регистра в целом, вы можете активировать ее только для другой части:
$ print -l (#i)(somelongstring)*
Это будет соответствовать любому файлу, который начинается с "somelongstring" (в любой комбинации нижнего / верхнего регистра). Флаг без учета регистра применяется ко всему, что находится в скобках, и может использоваться несколько раз. Прочтите руководство zshexpn(1) для получения дополнительной информации.
ОБНОВИТЬ Чуть не забыл, чтобы это работало, вам нужно включить подстановку extendend:
setopt extendedglob
Что насчет setopt no_CASE_GLOB?
Как бы то ни было, если у вас установлен nocaseglob, вы можете использовать (#I), чтобы временно отменить его, для чувствительного к регистру глобуса.
$ 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~
*jtweet* matches anything, it will be expanded before the function sees it. (Or error or empty string depending on other shopt settings). Interesting idea, though. I think it will mostly work if you run i ls '*jtweet*', even if there's also a `jtweet.pm in the directory. There are lots of potential problems with spaces or other special characters in non-glob args, or in the glob, though.
Для полноты (и откровенно удивлен, что это еще не упоминается, хотя все остальные ответы лучше и / или «более правильные»), очевидно, можно также использовать (особенно для поклонников grep):
$ ls | egrep -i '^SomeLongString'
Можно также использовать избыточный ls -1 (это вариант «one», а не «ell»), но при передаче в канал каждая запись в любом случае уже будет по одной на строку. Я обычно использую что-то подобное (по сравнению с set) в сценариях оболочки, например, в цикле for / while: for i in $(ls | grep -i ...). Однако другой ответ с использованием find был бы предпочтительнее и более гибким в этом случае, потому что вы можете, например, опустить каталоги (или установить другие ограничения): for i in $(find . -type f -iname 'SomeString*' -print -maxdepth 1)... или даже полностью отказаться от цикла и просто использовать мощность find самостоятельно , например: find ... -exec do_stuff {} \; ..., но я сделаю отступление (опять же для полноты).
Спасибо. Я надеялся, что есть способ указать это как часть самого глобуса. В руководстве по zsh упоминается что-то подобное, но я не мог этого понять.