Я пытаюсь изменить файлы, которые выглядят так:
01 Track name.mp3
в
01 - Track name.mp3
До сих пор мои попытки были тщетны.
rename '0. ' '$&- ' *.mp3
rename 's/0. /$&- /' *.mp3
rename '/0. /' '/$&- /' *.mp3
rename 's/0.\ /$&-\ /' *.mp3
rename 's/0.\ /$1-\ /' *.mp3
решение1
Предположим, что команда perl rename
:
Вы довольно близки к последней команде. rename 's/(0.) /$1 - /' *.mp3
будет работать. Нет необходимости экранировать пробелы, они не имеют особого значения в регулярных выражениях (они имеют в именах файлов, но это не имеет значения здесь), и вам нужны скобки вокруг той части, которую вы хотите использовать повторно.
решение2
Обязательно ли использовать rename
команду?
$ ls
01 Track name.mp3 02 Track name.mp3 03 Track name.mp3
$ for a in *.mp3
> do
> mv -i "$a" "${a%% *} - ${a#* }"
> done
$ ls
01 - Track name.mp3 02 - Track name.mp3 03 - Track name.mp3
решение3
$ rename 's/^(\d\d)\s*/$1 - /' *.mp3
Это переименует все файлы MP3, в начале имени которых есть двойная цифра, вставив пробел-тире-пробел после цифр. Так что 01 Track name.mp3
станет01 - Track name.mp3
Судя по вашим собственным попыткам, все имена файлов начинаются с цифры ноль, а вы, похоже, хотите вставить тиренапрямуюпосле цифр следует пробел:
$ rename 's/^(0\d)\s*/$1- /' *.mp3
Это преобразуется 01 Track name.mp3
в 01- Track name.mp3
.
решение4
Есть две (три) команды стирания: одна из них является частьюutil-linuxпакет, который устанавливается на каждой невстраиваемой системе Linux, и один (фактически два варианта) на основе Perl. СмотретьЧто со всеми этими переименованиями: prename, rename, file-rename?
Команда util-linux очень проста, но вы находитесь в редкой ситуации, когда она может сделать то, что вы хотите. Замените первый пробел на пробел-тире-пробел:
rename ' ' ' - ' [0-9][0-9]\ [^-]*