Многодисковые диапазоны файлов в лексикографическом порядке в zsh

Я хотел бы указать ряд файлов (в лексикографическом порядке) с двумя целыми числами (например, от 2 до 57) в zsh путем подстановки.

Например: «выберите файлы с 2 по 57 в лексикографическом порядке по пути, который соответствует некоторому шаблону глобуса».

Я думал, что использование квадратных скобок сделало бы это

for x in /foo/bar/*[2-57]; do print $x; done 

но zsh, по-видимому, думает, что я прошу файлы с 2 по 5 (или что-то в этом роде) вместо файлов с 2 по 57 . Любые мысли почему? Как я могу это сделать?

  • Возможно ли иметь привязки клавиш vim в терминале?
  • Ruby Version Prompt (Oh My ZSH) не работает вне TMUX
  • Ищете карту xinit / startx rabbithole
  • Получить индекс массива
  • Не удается восстановить со спящего tmux во время сеанса SSH
  • Как я могу использовать !! в псевдониме zsh
  • zsh expand-or-complete для всех файлов независимо от команды / контекста
  • «Команда не найдена», когда функция sudo'ing от ~ / .zshrc
  • 2 Solutions collect form web for “Многодисковые диапазоны файлов в лексикографическом порядке в zsh”

    [2-57] – набор символов, состоящий из 2 , 3 , 4 , 5 и 7 , в zsh и любой другой подстановочный знак и синтаксис регулярного выражения. Ваш шаблон glob *[2-57] соответствует каждому имени файла, последним символом которого является одна из этих пяти цифр.

    Я думаю, что вы игнорируете синтаксис квалификатора [m,n] glob . В конце шаблона квалификаторы Glob всегда идут в круглых скобках, а разделитель диапазонов – это запятая. Шаблон *([2,57]) расширяется до второго, третьего, …, 57-го совпадений. Заказ расширения по умолчанию – лексикографический (с некоторым специальным волшебством для сортировки чисел в числовом порядке, если установлена ​​опция numeric_glob_sort ); вы можете управлять им с помощью квалификатора o или O glob (например, *(om[2,57]) чтобы соответствовать 57 последним файлам, кроме самого последнего файла).

     for x in /foo/bar/*([2,57]); do print $x; done 

    Не то, что вы просили, но связанные и, возможно, полезные для будущих читателей: если вы хотите перечислить файлы с 2 по 57, существуют они или нет, вы можете использовать выражение скобки диапазона. Эта функция также существует в bash и ksh.

     echo hello{2..57} 

    И если вы хотите сопоставить файлы, имя которых содержит число от 2 до 57, вы можете использовать шаблон <2-57> . Это характерно для zsh.

     $ ls file1 file2 file3 file57 file58 $ echo file<2-57> file2 file3 file57 

    Обратите внимание, что шаблон, подобный *<2-57> , скорее всего, не будет делать то, что вы ожидаете, потому что * может также соответствовать цифрам. Например, file58 соответствует *<2-57> , при этом file5 соответствует * part и 8 соответствует части <2-57> . Шаблон *[^0-9]<2-57> позволяет избежать этой проблемы.

    но zsh, по-видимому, думает, что я прошу файлы с 2 по 5 (или что-то в этом роде) вместо файлов с 2 по 57. Любые мысли почему?

    Поскольку скобки [] указывают список совпадающих символов (которые могут быть цифрами), а не числа, интерпретируемые математически. Такой шаблон сопоставляется с одним символом. Список может содержать диапазоны, но цифры или буквы. [2-57] соответствует расширению до «Все цифры в диапазоне от 2 до 5 и .

    Для сопоставления чисел от 2 до 57 было бы проще использовать выражение последовательности вместо шаблона глобуса (или вместе с ним):

     for x in /foo/bar/*{2..57}; do print $x; done 

    Изменить : Но это, к сожалению, не даст вам лексикографического порядка всех перечисленных файлов – они будут сгруппированы по общим окончаниям номеров из-за расширения оболочки.

    Interesting Posts

    openssl не создает сертификаты с ожидаемой датой истечения срока действия

    команда в / etc / inittab не работает на SLES 11

    Как распаковать набор файлов в каталоге?

    Как добавить нового пользователя для входа в GUI?

    Приведение процесса к файловому дескриптору в переменную

    Значок изменения для командной строки формы приложения?

    Я не могу создать fstab при установке arch

    Как подключиться из одного экземпляра гостевой комнаты VM к другому экземпляру виртуальной машины VM

    Запуск автоматического прописного слова после точки

    Использование отдельных линий из выходов grep

    Дескриптор файла, связанный с сокетом или каналом в proc

    Извлечь имена файлов со структурой каталога в CSV-файл (отдельный файл csv для каждого имени изображения)

    как читать вывод ssh из команды «последний» и «кто»

    Как устранить проблемы / проблемы с аудио в Arch?

    Объединить строки в файле вместе с регулярным выражением для «выровнять» многострочные лог-файлы журнала

    Linux и Unix - лучшая ОС в мире.