1 votes

Déplacement des liens symboliques dans un dossier basé sur les balises id3

J'essaie de mettre mon dossier de musique dans quelque chose de raisonnable. Pour l'instant, toute ma musique est stockée dans le dossier /home/foo pour que tous les albums soient liés à soft ~/music . Je veux que la structure soit ~/music/<artist>/<album> J'ai mis tous les liens symboliques dans ~/music en ce moment, donc j'ai juste besoin de mettre les liens symboliques dans la bonne structure. J'essaie de le faire en fouillant dans l'album symlinké, en récupérant le nom de l'artiste avec id3info. Je peux le faire, mais je n'arrive pas à le faire fonctionner correctement.

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

Maintenant, il trouve le bon dossier, mais chaque fois qu'il y a un espace dans le nom du dossier, il le transforme en ligne nouvelle.

Voici un exemple de ce que j'essaie de faire

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

J'essaie de mv The Trance Mix 3 Wanderlust - DJ Exortius [TRANCE DEEP VOCAL TECH]@ dans le vrai répertoire DJ Exortius . DJ Exortius existe déjà, il suffit donc de le déplacer dans le bon répertoire basé sur l'étiquette id3 du mp3 qu'il contient.

Merci !

PS : J'ai essayé easytag, mais quand je restructure l'album, il le déplace de /home/foo ce qui n'est pas ce que je veux.

0voto

Damian Powell Points 315

Vous devez canaliser find en while au lieu de faire for $(find) afin de gérer correctement les noms de fichiers contenant des espaces.

Vous pouvez également utiliser la substitution de processus pour accomplir la même chose. Vous redirigez <(find) dans le done partie de la boucle while.

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

Ou

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

Cette dernière a l'avantage de ne pas créer de sous-coquille.

0voto

Si vous utilisez des liens durs au lieu de liens symboliques, vous pouvez laisser votre pool non ordonné en place tout en utilisant EasyTAG pour restructurer les liens.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X