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

В настоящее время я борюсь с некоторыми музыкальными папками. Однажды я решил назвать их по шаблону: artist - album - year. Сегодня я понял, что это не было умным ходом и теперь нужно называть мои каталоги по шаблону: year - artist - album, поскольку они будут отображаться в порядке возрастания, когда они перечислены.

Я начал выполнять переименование по но, имея примерно 700 папок, должен быть более простой способ; Я пытался использовать gprename, но я не очень хорошо разбираюсь в regex и 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)

EDIT: Некоторые имена артистов и альбомов имеют специальные символы, такие как And.Id или Kool & The Gang. Хотя каждый каталог имеет - в качестве разделителя.

1
задан 29 March 2017 в 16:18

1 ответ

Простой скрипт 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 May 2018 в 00:10

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

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