4

У меня есть следующие файлы в одном каталоге:

1-1 - different text for each file here.txt
1-2 - different text for each file here.txt
.
.
1-9 - different text for each file here.txt
1-10 - different text for each file here.txt
1-11 - different text for each file here.txt
1-12 - different text for each file here.txt
.
.


Я хочу переименовать файлы сразу (используя zmv запущенный в zsh), чтобы:

1-01 - different text for each file here.txt
1-02 - different text for each file here.txt
.
.
1-09 - different text for each file here.txt
1-10 - different text for each file here.txt
1-11 - different text for each file here.txt
1-12 - different text for each file here.txt


Вот что я попробовал: zmv '1-([0-9])(*)' '1-0$1$2'


Это приводит к следующим именам файлов:

1-01 - different text for each file here.txt
1-02 - different text for each file here.txt
.
.
1-09 - different text for each file here.txt
1-010 - different text for each file here.txt
1-011 - different text for each file here.txt
1-012 - different text for each file here.txt
.
.

Поэтому я решил изменить шаблон поиска на zmv '1-([0-9]{1})(*)' '1-0$1$2' чтобы сопоставлять только файлы с одной цифрой после дефиса, но это не работает (я просто получаю zmv:232: no matches found: 1-([0-9]{1})(*)).

Что я делаю неправильно? Это вообще возможно, используя zmv или я должен использовать что-то вроде sed в цикле for или что-то в этом роде?

1 ответ1

4

Это должно работать для вас:

zmv '1-([0-9])( *)' '1-0$1$2'

или же

zmv '1-([0-9])([^0-9]*)' '1-0$1$2'

Вам просто нужно, чтобы совпадение включало только одну цифру, за которой следовал пробел или не цифра. То, как вы это сделали, соответствовало одной цифре, за которой следовало что угодно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .