Изменить порядок файлов внутри папки

У меня около 30 тысяч песен в mp3. Я уже организовал / пометил их с помощью Musicbrainz Picard. Но Пикард сделал излишки папок и подпапок внутри друг друга из-за тегов.

Теперь мне нужен скрипт для чтения каждой подпапки и перемещения всех mp3-файлов из папок подпапки в основную подпапку. Например:

 Music -  
   Offspring -
      Album 1 - 20 songs
      Album 2 - 30 songs
      Album 3 - 5 Songs
         Folder 1 - 2 Songs
         Folder 2 - 3 Songs
   Journey -
      Song Pack 1 - 2 Songs
           Packy 1 - 15 Songs
           Packy 2 - 20 Songs
           Packy 3 - 7 Songs
      Album 2 - 20 songs
      Whatever 3 - 10 Songs

После запуска скрипта они будут выглядеть так:

Music -    
   Offspring - All Songs inside THIS folder. Not inside subfolders of Offspring.  
   Journey - All Songs inside THIS folder. Not inside subfolders of Journey.   

И так далее..

Поэтому вся музыка для каждой подпапки каждой музыкальной группы не должна иметь больше подпапок, и все песни в соответствующих подпапках должны быть перемещены в основную подпапку музыкальной группы.

Поэтому, когда я проверяю музыку и вижу Bee Gees, я ЗНАЮ, что все песни находятся там, а не внутри какой-то подпапки Bee Gees.

ПРИМЕЧАНИЕ. - В некоторых случаях существует более 20 рекурсивных подпапок. Примером является: Music/Lady Gaga/1/Album/Lady Gaga/2/2/2/1/1/1/1/3/3Album 2/Lady Gaga/1/1/1/SONG.mp3, В этом случае я хочу это внутри Music/Lady Gaga и устранить остальные папки.

4 ответа

Решение

Я предлагаю запустить следующий (проверенный, но без гарантии) скрипт из главного каталога, в котором находятся все каталоги художников:

#!/bin/bash

for f in *; do
  find "$f" -mindepth 2 -type f -exec mv --backup=numbered -t "$f" {} +
done

for f in *; do
  find "$f" -mindepth 1 -type d
done |
  sort -r |
  while read d; do
    rmdir "$d"
  done

Это также заботится об удалении дубликатов и пустых подкаталогов.

Посмотрите на Easytag Установить easytag,

sudo apt-get install easytag

Опция сканера ("Сканер" -> "Переименовать файлы и каталог") позволяет переупорядочивать файлы на основе параметров из тега ID.

Пример:

Artist/Track# - track name.ogg`: `%a/%n - %t

приведет к:
Prince / 07 - Purple Rain.ogg

Если у вас есть достаточно места для резервного копирования вашей музыки, прежде чем делать это, вы можете захотеть это сделать. Я проверил его, но он не дает никаких гарантий - если он сломается, вы сохраните все части.

Я сделал это при условии (исходя из вашего описания), что у вас есть основная папка, разделенная на исполнителя, далее разделенная на альбом. Если это соответствует вашим настройкам, продолжайте.

В терминале перейдите в вашу музыкальную директорию и выполните следующую команду (в bash):

for j in * ; do (cd "$j" ; (for i in * ; do (cd "$i" ; find . -name \*.[mM][pP]3 -exec mv {} . \; ) ; done)) ; done

Если у вас есть вопросы, просто спросите.

Возможно, вам удастся изменить настройки Picard, чтобы он не создавал эту иерархию каталогов для начала - возможно, что он будет в некоторой степени зависеть от этих файлов, оставшихся там, где он их оставил.

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