Каталоги переименования массы для перемещения года от конца до начала

Я в настоящее время борюсь с некоторыми музыкальными папками. Я когда-то решил назвать их после шаблона: 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. Хотя каждый каталог имеет - как разделитель.

11
задан 29 March 2017 в 06:18

2 ответа

Принятие Вас имеет доступ к жемчугу 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 для справки!)
16
ответ дан 23 November 2019 в 03:55

Простой сценарий 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 */

6
ответ дан 23 November 2019 в 03:55

Другие вопросы по тегам:

Похожие вопросы: