Tri par lots de chansons dans un répertoire par artiste sous Unix [fermé]

0

J'ai plusieurs chansons MP3 dans un répertoire et je veux les trier par artiste de sorte que chaque nom d'artiste soit un répertoire contenant la musique de cet artiste.

M.jaradat
la source
2
... Eh bien ... j'ai bien peur que cette question ne soit pas très claire, vous devriez envisager de la reformuler de manière à pouvoir obtenir des réponses. Il est très difficile de répondre à quelque chose qui n'a aucun sens. Merci.
Josiah
Le nom de l'artiste est-il dans le nom du fichier? Existe-t-il un moyen non ambigu d’extraire le nom de l’artiste du nom de fichier ou du contenu du fichier?
Wallyk
Cela n’appartient pas à stackoverflow, l’opérateur n’avait pas demandé une solution "programmatique" issue d’une édition ultérieure. Je l'ai changé en lot. C'est parfaitement sur le sujet ici, voir ma réponse ci-dessous.
Terdon
@terdon La raison pour laquelle cela semble appartenir à stackoverflow est que l'utilisateur a marqué cette question en tant que programmation unix.
Ganesh R.
3
Si cette question concerne les scripts et l’utilisation de shell Unix simples (et qu’elle en a vraiment l’air), c’est le sujet Super User. Mais notez également que l'existence de balises ne crée pas de questions étiquetées sur le sujet.
Daniel Beck

Réponses:

3

Cela suppose que vos tags mp3 sont au format id3v2. id3v1 formate les choses un peu différemment. Je recommande quelque chose comme mediainfoça pour ça. Cet exemple utiliseid3v2

pour le fichier en * .mp3; faire
    IFS = $ ':'
    artist = "$ (id3v2 -l" $ {fichier} "| grep" TPE1 "| awk '{print $ 2}')"
    # Votre nom d'artiste est maintenant stocké dans $ artist.
    # Cet exemple crée simplement un répertoire d'artistes et y déplace le fichier.
    # Terrible façon d’organiser de la musique, mais c’est une démonstration!
    [[! -d "$ {artiste}"]] && mkdir -p "$ {artiste}"
    mv -f "$ {fichier}" "$ {artiste}"
terminé

Une vraie solution consiste à utiliser quelque chose comme MusicBrainz Picard.

UtahJarhead
la source
Que faire s'il y a plusieurs fichiers du même artiste? Est-ce que cela va gérer ce scénario?
Ganesh R.
Toutes les chansons du même artiste seront déplacées dans le même dossier. Cela suppose que tous les fichiers sont déjà correctement étiquetés.
UtahJarhead
Lisez les commentaires dans ce script. Ne faites pas que lancer ce que j'ai posté et appelez-le bien.
UtahJarhead
0

Je ne suis pas sûr du système d'exploitation sur lequel vous vous trouvez, mais puisque votre question a été étiquetée en tant que programmation Unix, je supposerai que vous êtes sur un * ix. Donc, si vous pouvez installer id3tool, vous pouvez exécuter la ligne de commande BASH suivante:

find . -name "*.mp3" | while read n; do 
    dir=`id3tool "$n" | grep Artist | cut -f 3 | sed 's/\s*$//'`; 
    mkdir -p "$dir"; 
    mv "$n" "$dir"/"$n" ; 
done

EXPLICATION:

Ce petit script parcourt chacun de vos fichiers mp3, extrait le nom de l'artiste à l'aide de id3toolet l'enregistre dans la variable $dir. Il créera ensuite un répertoire avec le nom de l'artiste (sauf s'il existe déjà) et déplacera le fichier dans ce répertoire.

Vous pouvez également le faire sous forme d’interface graphique en utilisant des lecteurs de musique tels que amarok qui offrent cette fonctionnalité (ou du moins, il l’était auparavant). Il existe également différents éditeurs id3, il suffit de chercher dans votre source logicielle préférée, dont certains au moins devraient également pouvoir le faire.

terdon
la source
1
Et bien sûr, je vois maintenant que @UtahJarhead a donné essentiellement la même réponse pendant que j'écrivais la mienne. Oh bien :)
terdon
Pour mémoire, il est recommandé de ne pas utiliser les scripts `in in bash. Ils ne nichent pas très bien et il est plus facile de lire $ ().
UtahJarhead