Я в настоящее время борюсь с некоторыми музыкальными папками. Я когда-то решил назвать их после шаблона: artist - album - year
. Я понял сегодня, что это не было умным перемещением, и хотят теперь назвать мои каталоги после шаблона: year - artist - album
поскольку они затем обнаружатся в порядке возрастания при списке.
Я начал делать переименование вручную, но примерно с 700 папками, должен быть более простой путь; я пытался использовать gprename
но я не так хорош в сценариях удара и regex...
Есть ли кто-либо, кто мог помочь мне сэкономить плохие кончики пальцев?
Некоторые примеры:
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
. Хотя каждый каталог имеет -
как разделитель.
Принятие Вас имеет доступ к жемчугу rename
(общедоступный в Ubuntu - благодаря @Serg для разъяснения различия. Если в сомнении, звонить /usr/bin/rename
и необходимо получить правильный), Вы могли использовать:
rename -n 's/(.*) - (\d{4})\//$2 - $1/' */
Удалить -n
после тестирования для фактического переименования каталогов. Это принимает всю дату альбомов между 1 000 и 9999. Вероятно, разумный...
s/old/new
замена old
с new
(.*)
сохраните любое количество любых символов к ссылке как $1
позже(\d{4})\/
сохраните четыре цифры в конце строки к ссылке как $2
позже.*/
соответствуйте всем каталогам (не файлы - благодаря @muru для справки!)Простой сценарий Python может сделать такое задание:
$ tree
.
├── Aes Dana - Memory Shell - 2004
├── Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
└── rename_dirs.py
2 directories, 1 file
$ ./rename_dirs.py */
$ tree
.
├── 2004 - Aes Dana - Memory Shell
├── 2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
└── rename_dirs.py
Содержание сценария:
#!/usr/bin/env python
from shutil import move;
import sys
for i in sys.argv[1:] :
parts = i[:-1].split('-')
year = parts[-1].strip()
new_name = year + " - " + " - ".join(parts[:-1]).strip()
move(i,new_name)
*/
предоставлять только каталоги как аргументы сценарию-
символ. Новое имя файла создается из частей, которые мы извлекли. move()
функция от shutils
модуль - то, что на самом деле переименовывает каталогиОтметьте использование: ./rename_dirs.py */