2013-03-31 2 views
-1

Итак, у меня есть музыкальная папка, полная разных форматов файлов, все вместе. Он хорошо структурирован: Music/[Artist Name]/[Album Name], с альбомами компиляции в папке «Various». Некоторые папки содержат только файлы .mp3, .m4a или .flac, а некоторые имеют несколько версий альбома в разных форматах файлов. Есть также, конечно, различные .jpegs обложки, и многие из папок художника содержат .jpeg портрета художника, а также много разных файлов .cue и .log и других нежелательных файлов.Нужна помощь в написании сценария для разметки моих .flac-файлов в отдельной библиотеке папок

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

Мне не удалось найти приложение, способное справиться с этим, но я решил, что сценарий оболочки, вероятно, справится с этим. Однако я жалко с bash и действительно не хочу разорвать свою библиотеку.

Файлы находятся на удаленном диске, к которому я могу получить доступ с помощью mac, windows или linux, поэтому любой подход хорош.

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

  1. Найти каждый подкаталог/Музыка, которая содержит файлы .flac

  2. Скопируйте каждый из этих каталогов в полном объеме (и промежуточные родительские каталоги) в новое место в/FLAC, но исключить из копии другие типы аудиофайлов (.mp3, .m4a и т. д.).

  3. Если в каталоге нет других типов аудиофайлов, чем .flac, удалите весь каталог. Если у него есть другие аудиофайлы, просто удалите файлы .flac.

  4. Проделайте одну последнюю прокрутку всей/Музыки, чтобы удалить любую директорию, которая не содержит аудиофайлов в себе или в любом подкаталоге.

+3

Что вы на самом деле пытались до сих пор? –

+0

Я рассмотрел несколько различных инструментов резервного копирования, но я не нашел того, что может быть вполне конкретным - многие из них могут удалять опустошенные папки, но так как многие из flac-только папок содержат другие файлы, такие как jpegs, t будет пустой папкой и оставит позади. – user2229787

ответ

0

Сначала создайте новую родительскую папку, например. «MusicNew», который должен быть эквивалентен существующей папке «Музыка». Затем, предполагая, что ваше описание подпапок и тип файла, который вы хотите скопировать, должны работать следующие строки кода.

IFS='\n' 
for i in `find Music -mindepth 2 -maxdepth 3 -type f -name "*flac"`; 
do 
    echo ${i}; 
    newfold=`echo ${i} | sed -e 's/Music/MusicNew/g'`; 
    filename=`basename ${i}`; 
    fulldirpath="${newfold:0:${#newfold} - ${#filename}}"; 
    echo $fulldirpath/${filename}; 
    mkdir -p ${fulldirpath}; 
    mv ${i} ${fulldirpath}/; 
done 
+0

Эй, спасибо за вашу помощь; однако, если мои навыки чтения не совсем ошибочны, этот скрипт оставит оригинальные копии на месте? Я собираюсь полностью разбить библиотеку, удалив флаки из исходного местоположения. Взгляните на мой комментарий выше на мой первоначальный вопрос для моего полного объяснения логики, которую я собираюсь сделать с этой операцией. – user2229787

+0

Вместо того, чтобы делать 'cp $ {i} $ {fulldirpath}' just do 'mv $ {i} $ {fulldirpath}' – iamauser

+0

Будут ли такие другие файлы (например .jpg)? Кроме того, удалит ли исходную содержащую папку, если она теперь пуста после перемещения? – user2229787

1

Вот другой подход:

find . -type f -name \*.flac -printf "%h\n" | 
sort -u | 
while read -r dirname; do 
    new="../flac/$dirname" 
    echo mkdir -p "$new" 
    echo mv "$dirname"/*.flac "$new" 
    jpgs=("$dirname"/*.jpg) 
    [[ ${#jpgs[@]} -gt 0 ]] && echo cp "$dirname"/*.jpg "$new" 
done 
  • find с -printf напечатает имя каталога каждого файла FLAC (относительно текущего каталога
  • sort -u для удаления дубликатов - теперь у вас есть список каталогов, содержащих файлы flac
  • цикл while итерации по каталогам, c lones иерархия каталогов в другом каталоге (в соответствии с вашими потребностями), перемещает файлы flac и копирует файлы jpg, если они есть.

Удалите команды echo, если вы удовлетворены, это работает для вас.

+0

Это потрясающе, спасибо! Я только что обновил свой оригинальный вопрос для дополнительной ясности; этот ответ (в основном) заботится о шагах 1 и 2, но все советы для шагов 3 и 4? – user2229787

+0

Вы хотите удалить каталог, если у него нет других аудиофайлов. Что делать, если у него есть файлы без звука? –

+0

Это будет в случае с каталогом, в котором ранее содержались только файлы .flac и .jpegs. Если у него нет аудиофайлов, я предполагаю, что это значит, что файлы были перемещены, а соответствующие не-аудиофайлы были скопированы. Поэтому каталог не нужен. Это каталог музыкальной библиотеки, поэтому в каждой папке должны быть либо аудиофайлы, либо поддиректории с аудиофайлами. – user2229787

 Смежные вопросы

  • Нет связанных вопросов^_^