В настоящее время я борюсь с некоторыми музыкальными папками. Однажды я решил назвать их по образцу: artist - album - year
. Сегодня я понял, что это был неумный шаг, и теперь хочу назвать мои каталоги в соответствии с шаблоном: так year - artist - album
как они будут отображаться в порядке возрастания в списке.
Я начал делать переименование вручную, но с примерно 700 папками должен быть более простой способ; Я пытался использовать, gprename
но я не очень хорош в регулярных выражений и сценариев Bash ...
Есть ли кто-нибудь, кто мог бы помочь мне избавить мои бедные кончики пальцев?
Несколько примеров:
Aes Dana - Memory Shell - 2004
Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
станет
2004 - Aes Dana - Memory Shell
2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
РЕДАКТИРОВАТЬ: некоторые имена исполнителей и альбомов имеют специальные символы, такие как And.Id
или Kool & The Gang
. Хотя в каждом каталоге есть -
разделитель.
источник
-
?Ответы:
Предполагая, что у вас есть доступ к Perl
rename
(обычно доступен в Ubuntu - спасибо @Serg за разъяснение различий. Если вы сомневаетесь, позвоните,/usr/bin/rename
и вы должны получить правильный), вы можете использовать:Удалить
-n
после тестирования, чтобы фактически переименовать каталоги. Это предполагает дату всех альбомов между 1000 и 9999. Вероятно, разумно ...объяснение
s/old/new
заменитьold
наnew
(.*)
сохранить любое количество любых символов для ссылки, как$1
позже(\d{4})\/
сохранить четыре цифры в конце строки для ссылки, как$2
позже.*/
сопоставлять все каталоги (не файлы - спасибо @muru за помощь!)источник
*/
чтобы соответствовать только каталоги.mksh
есть встроенная функцияrename
. Достаточно заменить его на полный путь или позвонить,prename
чтобы вызвать переименование Perlrename
«иногда не называютprename
», но, очевидно, это две «ветви» одного и того же сценария, который не поддерживается Debian и другой, которая есть. Так что да . , , это много беспорядка - у некоторых оболочек есть своиrename
, у пакета perl свойrename
, а у самого debian есть отдельный пакетrename.ul
в unix.stackexchange.com/q/229230/21167Простой скрипт Python может сделать такую работу:
Содержание скрипта:
Как это работает:
*/
в качестве аргументов скрипту только каталоги-
символу. Новое имя файла состоит из частей, которые мы извлекли.move()
Функция изshutils
модуля - это то, что на самом деле переименовывает каталогиОбратите внимание на использование:
./rename_dirs.py */
источник