2

У меня есть несколько тысяч файлов MP3, вложенных в папки, которые я бы хотел переименовать.

В настоящее время файлы имеют следующее соглашение об именах:

"tracknumber_artistname_-_songname_MP3COLLECTION.mp3"

Например:

"01_Michael_Jackson_-_Wanna_Be_Startin'_Something_MP3COLLECTION.mp3"

Тем не менее, я хотел бы реорганизовать эти файлы, переместив имя исполнителя после названия песни, убрав излишнюю дробь в конце и заменив все подчеркивания пробелами, что привело к приведенному выше соглашению и приведению примера, подобного следующему:

"tracknumber songname - artistname.mp3"
"01 Wanna Be Startin' Something - Michael Jackson.mp3"

У меня есть переименователь Bulk File, который дает опции для Regex, но я не знаю, как это сделать. Какие-либо предложения? Я также открыт для использования различных инструментов или даже методов, если переименование файлов не является лучшим вариантом.

Примечание: я первоначально разместил это на StackExchange, но мне посоветовали опубликовать это здесь вместо этого, потому что там не по теме.

2 ответа2

1

В винде? Я не знаю "Переименователь файлов". Я бы использовал инструмент Total Commander "Multi Rename". Более того, я бы, вероятно, работал с perl или awk из терминала Cygwin для более полного решения сценариев. Это было бы слишком далеко для здесь, хотя. Просто с точки зрения регулярных выражений, это работает для меня в TC с вашим именем файла (но только если файлы не содержат лишних "-" или "." В полях исполнителя или названия песни), вероятно, должно работать в любом массовом переименовании с поддержкой регулярных выражений. инструмент без особых проблем, потому что я не думаю, что использовал какие-то продвинутые вещи из RegEx, такие как классы символов posix (":digit:" и тому подобное)...

Если вы используете TC, вы хотите установить флажки «[E]» и "RegEx" и снять другие три в части "Поиск и замена" инструмента Multi-Rename. Я сам проверил все это в TC, поэтому, пожалуйста, оцените время, которое я потратил на вас :) Если вы используете другой инструмент, и он не работает, поищите в справочной системе RegEx "обратные ссылки", поскольку некоторые инструменты, как правило, используют разные стандарты RegEx bacrefs. (Это $ 1 $ 2 $ 3 и т.д. В моем коде ниже, что относится к поиску в скобках).

ПРИМЕЧАНИЕ. Если вы собираетесь переименовывать, пожалуйста, ради бога, сначала сделайте резервную копию всей вашей коллекции. Никогда не знаешь. Я не несу ответственности, бла-бла.

ПЕРВЫЙ: сделать разделитель в {tracknr} _ {artist} "_-_" вместо текущего "_". Потому что «_-_» выглядит как полезный разделитель, который не часто случайно появляется в любом нормальном тексте. Также давайте уберем часть "_ {MP3COLLECTION}" прямо здесь.

search for:   (([0-9]+)_)(.*)_(.*)(\..*)
replace with: $2_-_$3$5

Примечание: это предполагает, что вы включаете расширение файла в процесс переименования, и гарантирует, что вы сохраните это расширение, если у вас также есть файлы .ogg или что-то еще. Если ваш инструмент не включает расширение в процесс переименования, удалите последний "(\.. *)" из поиска и последние 5 долларов из замены.

Ваше имя теперь выглядит так: 1 _-_ Michael_Jackson _-_ Wanna_Be_Startin'_Something.mp3

ВТОРОЕ: теперь замените первое вхождение "_._" на "", а второе на "-":

search for:   (.*?)_-_(.*?)_-_(.*)(\..*)
replace with: $1 $2 - $3$4

Примечание: Опять же, если ваш инструмент не включает расширение файла в процесс, удалите последний "(\.. *)" из поиска и последние 4 доллара из замены.

Ваше имя теперь выглядит так: 1 Michael_Jackson - Wanna_Be_Startin'_Something.mp3

ТРЕТИЙ И ПОСЛЕДНИЙ: просто замените "_" на «».

Ваше имя теперь выглядит следующим образом: 1 Майкл Джексон - Хочу начать что-нибудь .mp3

Удачи!

/edit: достаточно точности, чтобы убедиться, что все эти подчеркивания правильно отображаются в этом посте :)

/ редактировать 2: запоздалая мысль. Вы также можете добавить номера треков ниже 10 (т. Е. 0-9) к 0, так что вы получите 01, 02, ..., 09, 10, 11 и т.д., Что значительно упростит сортировку и значительно увеличит шансы на такие вещи, как телефоны или MP3-плееры для воспроизведения ваших треков в правильном порядке. Для этого:

Search for:   (^[0-9] )
Replace with: 0$1
0

Мой первый инстинкт - не пытаться написать программу или скрипт для этого, а использовать готовую программу переименования mp3, чтобы сделать это за вас. Доступны разные (различного качества) для разных ОС.

Или, если вы увлечены идеей переименования, вы можете использовать инструменты gnu (доступные в linux/unix/mac или Cygwin), такие как sed или awk , или tr & cut & variable в скрипте bash ... you ' Вам понадобится стандартный способ выделения полей (песня, исполнитель, дорожка) в именах файлов, если вы используете переменное количество пробелов между ними, без установленного разделителя полей, что было бы сложно.

Вот очень, очень быстрая предварительная строка awk которая разделяет входящую строку (после того, как _ были переведены в пробелы) и распечатывает их в другом порядке, вам придется самостоятельно определять, как сохранить номер трека:

$ jackstring="tracknumber_artistname-songname_MP3COLLECTION.mp3"

$ echo $jackstring 
tracknumber_artistname-songname_MP3COLLECTION.mp3

$ echo "$jackstring"|tr -s "_" " "|awk -F'[-.]' '{printf "%s-%s.%s\n", $2,$1,$3 }' 
songname MP3COLLECTION-tracknumber artistname.mp3

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