#!/bin/sh
#Variables
destination_dir=$1
mpd_conf=<path/to/mpd.conf>
music_dir=$(cat $mpd_conf|awk '/^music/'|cut -d\" -f2)
mpdstate=$(cat $mpd_conf|awk '/^state/'|cut -d\" -f2)
#Automatic variables
num=0
count=$(cat $mpdstate |awk '/^[0-9]*:/'|wc -l)
dir=$(cat $mpdstate|grep -e ^$num: | awk -F"^[0-9]*:" '{ print $2 }' | awk -F'/' '{for (i=1; i< NF; i++ ) printf $i "/"}')
file=$(cat $mpdstate|grep -e ^$num: | awk -F"^[0-9]*:" '{ print $2 }')
#Test
mkdir -p $destination_dir
if test ! -w "$destination_dir" ; then
echo -e '\E[0;31m'"\033[1mYou have no permission to write there, or we have i\o error\033[0m"
exit
fi
echo -e '\E[0;32m'"\033[1mSynchronizing...\033[0m"
#Main cycle
while [ "$dir" != "" ]
do
mkdir -p "$destination_dir/$dir"
cp -n "$music_dir/$file" "$destination_dir/$file"
let num++
echo -ne "\rComplete: $num/$count"
dir=$(cat $mpdstate|grep -e ^$num: | awk -F"^[0-9]*:" '{ print $2 }' | awk -F'/' '{for (i=1; i< NF; i++ ) printf $i "/"}')
file=$(cat $mpdstate|grep -e ^$num: | awk -F"^[0-9]*:" '{ print $2 }')
done
echo -e '\n'
Программка синхронизирует текущий список треков в плей-листе с указанным вами местоположением. Полезно для закидывания большой коллекции куда-то ещё. В параметр ей указывается директория, куда копировать, в самом скрипте необходимо указать только путь к файлу конфигурации, дальше скрипт сам парсит конфиг на предмет music_dir и файла mpdstate. Копирование осуществляется с сохранением структуры папок, sync оно не делает, так что при копировании стоит делать его вручную.