Copier les fichiers.mp3 d'une playlist.m3u vers un autre média

Vous vous demandez comment copier les chansons d'une playlist vers une clef USB ou un autre média?
La réponse est juste là!

$ cat list.m3u | sed -e "/^#.*$/d" -e "s/\\r$//" -e 's/[^*]*/"&"/g' | xargs -i echo cp "{}" /media/usb0/autremedia/

Remplacez simplement list.m3u par le chemin de votre playlist et /media/usb0/autremedia/ par le chemin de votre clé usb.

Explication

Structure d'un fichier m3u

#EXTM3U
#EXTINF:246,1 idtag informations
/home/user/musique/album/titre1.mp3
#EXTINF:229,2 idtag informations
/home/user/musique de ma soeur/titre2.mp3
...

Supprimer les lignes commençant par un [#]

cat playlist.m3u | sed -e "/^#.*$/d"
/home/user/musique/album/titre1.mp3
/home/user/musique de ma soeur/titre2.mp3

Ceci semble convenir quoi que plus loin avec la commande xargs les retours chariot (\r) vont apparaitre et poser problème.

Supprimer les retours chariot \r

cat playlist.m3u | sed -e "/^#.*$/d" -e "s/\\r$//"
/home/user/musique/album/titre1.mp3
/home/user/musique de ma soeur/titre2.mp3

Entourer chaque chaine de guillemets

cat playlist.m3u | sed -e "/^#.*$/d" -e "s/\\r$//" -e 's/[^*]*/"&"/g' 
"/home/user/musique/album/titre1.mp3"
"/home/user/musique de ma soeur/titre2.mp3"

Enfin on exécute la copie vers un répertoire avec xargs

cat playlist.m3u | sed -e "/^#.*$/d" -e "s/\\r$//" -e 's/[^*]*/"&"/g' | xargs -i cp "{}" /media/usb0/lazicatoto/

Faire des tests

Il est possible de faire des tests en ajoutant echo après la dernière option de xargs

cat playlist.m3u | sed -e "/^#.*$/d" -e "s/\\r$//" -e 's/[^*]*/"&"/g' | xargs -i echo cp "{}" /media/usb0/lazicaOlaf/

cp /home/user/musique/album/titre1.mp3
cp /home/user/musique de ma soeur/titre2.mp3
^