Как можно использовать команду переименования, чтобы исправить эти имена файлов?

Как можно использовать команду переименования, чтобы исправить эти имена файлов?

Я пытаюсь изменить файлы, которые выглядят так:

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]\ [^-]*

Связанный контент