mardi 30 août 2011

Comment lancer une commande par ligne d'un fichier

Migrer l'emplacement d'une bibliothèque musicale et impact sur les listes

J'avais mes mp3 organisés en :
/musique/a-e/[artiste] - [album] (année)/...mp3s
/musique/f-k/[artiste] - [album] (année)/...mp3s

Pour des raisons de facilité de lecture, je change en
/musique/[Artiste]/[Album (année)]/...mp3

Et du coup, mes listes ne sont plus à jour du tout... Argh, mais comment faire ??
Allez, la solution en une petite ligne de bash :

Imaginons que la liste initiale s'appelle test.m3u
Qu'elle soit dans le répertoire /musique, là où se trouvent tous les répertoires avec les albums

Alors :

cat test.m3u | while read LINE; do if [ ${LINE:0:1} == \/ ] ; then MORCEAU=${LINE##*- } ; echo $MORCEAU ; find . -name "*$MORCEAU" >> NewList.m3u; else echo $LINE >> NewList.m3u ; fi ; done

Qu'est ce que ça fait :
Pour chaque ligne du fichier "test.m3u", on met la ligne dans la variable "LINE"
cat test.m3u | while read LINE;

Si la ligne commence par un "/", alors c'est un chemin vers un morceau mp3, on stocke la fin de la ligne, depuis le denier "- " dans la variable MORCEAU, (en effet mes mp3 sont sous la forme 01 - nom de la chanson.mp3)
if [ ${LINE:0:1} == \/ ] ; then MORCEAU=${LINE##*- }

On affiche le morceau en cours
echo $MORCEAU ;

On recherche le même morceau dans la collection musicale, et on inscrit le résultat de la recherche dans la nouvelle liste de lecture
find . -name "*$MORCEAU" >> NewList.m3u;

Et enfin, si la ligne ne commençait pas par "/" (elle devait donc commencer par # et être un commentaire m3u), on la copie directement
else echo $LINE >> NewList.m3u

Evidemment, en fonction de vos emplacement, c'est à adapter, mais cela ne devrait pas vous poser de problèmes...
Bon courage !!

Aucun commentaire:

Enregistrer un commentaire