Перемещение символьных ссылок в папку на основе тегов id3

Я пытаюсь получить свою музыкальную папку во что-то разумное. Прямо сейчас у меня есть вся своя музыка, сохраненная в /home/foo таким образом, у меня есть все альбомы, мягкие связанный с ~/music. Я хочу, чтобы структура была ~/music/<artist>/<album> У меня есть все символьные ссылки в ~/music прямо сейчас, таким образом, я просто должен получить символьные ссылки в надлежащую структуру. Я пытаюсь сделать это путем копания в symlinked альбоме, получения имени художника с id3info. Я могу сделать это, но я, может казаться, не заставляю это работать правильно.

for i in  $( find -L $i -name "*.mp3" -printf "%h\n")
do

 echo "$i" #testing purposes

    #find its artist
    #the stuff after read file just cuts up id3info to get just the artist name
 #$artist = find -L $i -name "*.mp3" | read file; id3info $file | grep TPE | sed "s|.*: \(.*\)|\1|"|head -n1

 #move it to correct artist folder
 #mv "$i" "$artist"

done

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

Вот образец того, что я пытаюсь сделать

$ ls 
DJ Exortius/
The Trance Mix 3 Wanderlust - DJ Exortius [TRANCE DEEP VOCAL TECH]@

Я пробую к mv The Trance Mix 3 Wanderlust - DJ Exortius [TRANCE DEEP VOCAL TECH]@ в реальный каталог DJ Exortius. DJ Exortius уже существует, таким образом, это - просто вопрос перемещения его в корректный каталог, это основано на id3 теге mp3 внутри.

Спасибо!

PS: я попробовал easytag, но когда я реструктурирую альбом, он перемещает его от /home/foo который не является тем, что я хочу.

1
задан 03.04.2010, 04:35

2 ответа

Необходимо передать по каналу find в while вместо выполнения for $(find) для надлежащей обработки имен файлов с пробелами в них.

Можно также использовать замену процесса для выполнения того же самого. Вы перенаправили бы <(find) в done часть цикла с условием продолжения.

find -L $i -name "*.mp3" -printf "%h\n" | while read -r i
do
    moving_stuff_around
done

Или

while read -r i
do
    moving_stuff_around
done < <(find -L $i -name "*.mp3" -printf "%h\n")

Последний имеет преимущество не создания подоболочки.

0
ответ дан 24.11.2019, 02:05

При использовании жестких ссылок вместо символьных ссылок затем, можно оставить незаказанное объединение на месте при использовании EasyTAG для реструктуризации ссылок.

0
ответ дан 24.11.2019, 02:05

Теги

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