Bash, нужно изменить порядок слов в нескольких каталогах - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть значительная классическая коллекция FLA C, где каждый альбом является каталогом. Я понял, что использовал неоптимальную структуру и мне нужно переименовать все каталоги.

Мое текущее соглашение об именах:

COMPOSER (ПРОВОДИТЕЛЬ) - НАИМЕНОВАНИЕ ЧАСТИ

Например,

"Бах (Celibidache) - Масса в F несовершеннолетний "

Я хочу изменить имя на

COMPOSER - НАИМЕНОВАНИЕ ЧАСТИ (ПРОВОДНИК)

Т.е.

" Бах - Масса в F minor (Celibidache) "

Есть несколько возможных исключений, (CONDUCTOR) может быть (CONDUCTOR, SOLOIST), а некоторые каталоги не имеют части (CONDUCTOR) и должны быть оставлены как есть. НАИМЕНОВАНИЕ ЧАСТИ может содержать все разрешенные буквы и символы.

Все альбомы находятся в одном родительском каталоге, поэтому нет подкаталогов.

Какой простой способ сделать это?

1 Ответ

1 голос
/ 14 февраля 2020

использовать perl переименовать (в некоторых дистрибутивах это называется переименованием - Ubuntu и связанными, некоторые - в качестве пре-имен - Fedora и Redhat AFAIK). Сначала проверьте.

prename -n -- '-d && s/(\(.*\)) - (.*)/- \2 \1/' *
  • -n не переименовывайте, просто распечатайте результаты - удалите после того, как вы согласитесь с результатами.
  • -- конец параметров, запуск perlexpr и файлов
  • -d проверка того, что файл является каталогом
  • s/.../.../ - подстановка

Пример:

[test01@localhost composers]$ ls -la
total 12
drwxrwxr-x  3 test01 test01 4096 Feb 14 12:37  .
drwxrwxr-x. 7 test01 test01 4096 Feb 14 12:23  ..
drwxrwxr-x  2 test01 test01 4096 Feb 14 12:37 'Bach (Celibidache) - Mass in F minor'
-rw-rw-r--  1 test01 test01    0 Feb 14 12:27 'Bach (Celibidache) - Mass in F minor.flac'
[test01@localhost composers]$ prename -n -- '-d && s/(\(.*\)) - (.*)/- \2 \1/' *
Bach (Celibidache) - Mass in F minor -> Bach - Mass in F minor (Celibidache)
[test01@localhost composers]$ prename -- '-d && s/(\(.*\)) - (.*)/- \2 \1/' *
[test01@localhost composers]$ ls -la
total 12
drwxrwxr-x  3 test01 test01 4096 Feb 14 12:38  .
drwxrwxr-x. 7 test01 test01 4096 Feb 14 12:23  ..
-rw-rw-r--  1 test01 test01    0 Feb 14 12:27 'Bach (Celibidache) - Mass in F minor.flac'
drwxrwxr-x  2 test01 test01 4096 Feb 14 12:37 'Bach - Mass in F minor (Celibidache)'

Обратите внимание, что без -d и файл, и каталог были бы переименованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...