#1 Le 17/10/2010, à 22:03
- tirom14
[Script] Rangement de fichiers musicaux
Hello !!!!
Je viens tout juste de terminé (en partie) un script de rangement de fichiers musicaux.
C'est un script très simple qui lancé à partir d'un dossier, va parcourir tous ses dossiers et sous-dossiers, et copier chaque fichiers musicaux dans un répertoire donné selon une arborescence artiste/album/fichier.
Pour ce faire il utilise les tags de chaque fichiers grâce à totem, et plus particuilièrement totem-video-indexer.
C'est un de mes tout premier scripts un tant soit peu long,
C'est surement un peu brouillon mais je ne demande qu'à apprendre !
Dites moi ce que vous en pensez et les améliorations envisageables.
Je compte ajouter par la suite des amélioration comme, rajouté des paramétres permettant de choisir entre déplacer ou copier les fichier, choisir un type d'arborescence différents,
et plus goblalement faire en sorte que la chose soit un chouïa plus comptatible
V'la l'script :
#! /bin/bash
MUSIC_DIR=/home/$USER/Musiques
pwd=`pwd`
for i in *
do
#variable validant la copie
copie=1
# Cas d'un dossier, exploration récurcive
if [ -d "$i" ]
then
echo -e "rentrant dans le dossier : \033[31m $i \033[30m"
cd "$i"
/home/$USER/range.sh
echo -e "sortant du dossier : \033[31m $i \033[30m"
cd ..
else
# Récupération des tag
tag=`totem-video-indexer "$i"`
titre=`echo "$tag" | grep TITLE | cut -f 2 -d =`
artiste=`echo "$tag" | grep ARTIST | cut -f 2 -d =`
album=`echo "$tag" | grep ALBUM | cut -f 2 -d =`
num=`echo "$tag" | grep TRACK_NUMBER | cut -f 2 -d =`
res_codec=`echo "$tag" | grep AUDIO_CODEC | cut -f 2 -d =`
# Traitement du codec...
# En attente d'une solution plus général
if test "$res_codec" = "MPEG 1 Audio, Layer 3 (MP3)"
then
codec="mp3"
elif test "$res_codec" = "MPEG-4 AAC audio"
then
codec="m4a"
elif test "$res_codec" = "Vorbis"
then
codec="ogg"
else
# codec inconnu : pas de copie
copie=0
fi
nom=$num" - "$titre"."$codec
# Traitement en cas d'info inconnu
if [ -z "$titre" ]
then
nom="(a_trier) $i.$codec"
fi
if [ -z "$artiste" ]
then
artiste="a_trier"
fi
if [ -z "$album" ]
then
album="a_trier"
fi
if test $copie -eq 1
then
# Création des dossier si possible
cd $MUSIC_DIR
if [ ! -e "$artiste" ]
then
mkdir "$artiste"
echo -e "Dossier \033[32m$artiste \033[30mcréé"
fi
cd "$artiste"
if [ ! -e "$album" ]
then
mkdir "$album"
echo -e "Dossier \033[32m$album \033[30mcréé"
fi
cd "$album"
if [ ! -e "$nom" ]
then
echo -e "copie de \033[34m$i \033[30mvers \033[34m$artiste/$album \033[30msous \033[32m$nom \033[30m"
cp "$pwd"/"$i" "$nom"
fi
cd "$pwd"
fi
fi
done
Dernière modification par tirom14 (Le 17/10/2010, à 22:06)
Hors ligne
#2 Le 18/10/2010, à 20:00
- tirom14
Re : [Script] Rangement de fichiers musicaux
Meuh !!!! ><
Alors tout le monde s'en fout de mon p'tit script ?
Aller quoi.... un p'tit up !!
Hors ligne
#3 Le 18/10/2010, à 21:19
- Guitche
Re : [Script] Rangement de fichiers musicaux
J'ose pas le test lol de peur de tout chambouler ma liste de musique )
Je fais pas du script donc je ne sais pas, mais comment l'ordi va savoir classé comme ça sans mettre le bazar avec tous les unknow ou les pistes audio sans titres etc etc
Dernière modification par Guitche (Le 21/10/2010, à 19:50)
GNU/Linux - Ubuntu 11.04 Natty Narwhal
Bureau Unity
Hors ligne
#4 Le 18/10/2010, à 21:53
- tirom14
Re : [Script] Rangement de fichiers musicaux
Euh...
En gros pour faire simple, dans chaque fichier tu as le titre du fichier et des tags.
Les tag en gros c'est des infos à l'interieur du fichier concernant genre, le nom de l'album, l'artiste, le titre, le numero de piste....
Le script va utilisé sa pour rangé tout.
Bon bien sur sa ce base sur le faite que tu a bien tagué tout tes fichier
Si une composante est inconnue, genre l'artiste, le script le rangera dans un dossier a_trier. De même si tu a juste le nom de l'artiste il te mettera le fichier dans un dossier a_trier du dossier de l'artiste.
Euh pour tester sans causé de problème je te conseil de changé la ligne :
MUSIC_DIR=/home/$USER/Musiques
En mettant un autre dossier que t'aura créé. Le script copie les fichier donc au pire sa te fera 2 dossier de musique different
Hors ligne
#5 Le 21/10/2010, à 19:50
- Guitche
Re : [Script] Rangement de fichiers musicaux
Ha ok c'est déjà plus clair merci tirom14
EDIT : as tu prévu dans ton script un paramètre qui permettrai de gérer les pochettes d'album.
En effet, si les musiques sont reclassés, quand est-il pour les images de pochette d'album?? Elle vont se retrouver seules dans un dossier non?
Dernière modification par Guitche (Le 21/10/2010, à 19:54)
GNU/Linux - Ubuntu 11.04 Natty Narwhal
Bureau Unity
Hors ligne
#6 Le 21/10/2010, à 21:17
- tirom14
Re : [Script] Rangement de fichiers musicaux
Et bien pour les pochettes je pense pas que ce soit possible.
Dans une image, tu n'a pas les même info que pour les musique.
'fin j'ai pas regardé en détail mais tu as genre que le nom du logiciel avec lequel elle a été créé, donc sa fait un peu juste pour pouvoir trouver à quelle album elle appartient
Hors ligne
#7 Le 21/10/2010, à 21:29
- Pacifick_FR42
Re : [Script] Rangement de fichiers musicaux
Il me semble qu'avec les tag on peux mettre la pochette "dans " le fichier, pas besoin de le trimbaler
Hors ligne
#8 Le 24/10/2010, à 20:11
- BradPatt
Re : [Script] Rangement de fichiers musicaux
Merci, tu m'as fait découvrir totem-video-indexer.
Je cherchais justement un moyen en console pour récupérrer les tags.
Hors ligne
#9 Le 24/10/2010, à 21:50
- tirom14
Re : [Script] Rangement de fichiers musicaux
Et bien, content que ca te soit utile !
J'me rappelle que j'avais pas mal galèrer avant de trouver sa,
je trouvais pas de solution qui soit adaptable à différent format de fichier.
J'en était arrivé au point de vouloir convertir tout mes fichiers en mp3 pasque j'avais trouvé un logiciel sympas, mp3info, mais qui fonctionnais qu'avec ceux là
Hors ligne
#10 Le 26/05/2011, à 13:47
- fabristouquette
Re : [Script] Rangement de fichiers musicaux
bonjour, je suis intéresser par ton script pourrais tu me donner la marche à suivre pour pouvoir l'utiliser
merci
Hors ligne
#11 Le 26/05/2011, à 14:55
- pem1664
Re : [Script] Rangement de fichiers musicaux
hello moi ce serait plutot l'inverse qui m'interresserait! un script qui copie le nom des repertoires et qui l'inscrive récursivement dans les idtag histoire de remplacer les unknow par le nom du dossier! mais sinon quand tous les idtag sont bien rempli mais sont en vrac dans un dossier, ca peut etre sympa
Dernière modification par pem1664 (Le 26/05/2011, à 17:22)
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#12 Le 26/05/2011, à 16:49
- FRUiT
Re : [Script] Rangement de fichiers musicaux
Petites remarques en passant :
En 1978 on utilisait bien :
pwd=`pwd`
Mais de nos jours on utilise plus trop cette forme de substitution moins pratique et peu lisible, à remplacer systématiquement par :
pwd=$(pwd)
Aussi :
cp "$pwd"/"$i" "$nom"
Peut très bien s'écrire
cp "$pwd/$i" "$nom"
Et il vaut mieux réduire le nombre de pipes (et de programmes externes appelés), par exemple :
titre=`echo "$tag" | grep TITLE | cut -f 2 -d =`
Peut être réduit en :
titre=$(echo "$tag" | awk 'BEGIN { FS="`" } /TITLE/ { print $2 }')
Si l'utilisateur renomme le script par exemple en "range2.sh", ceci ne fonctionnera plus :
/home/$USER/range.sh
A remplacer par :
$0
Qui sera valide quel que soit le nom donné au script.
Dernière modification par FRUiT (Le 14/08/2011, à 10:24)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#13 Le 07/06/2011, à 22:02
- Cyrille_tux
Re : [Script] Rangement de fichiers musicaux
Hello,
# En attente d'une solution plus général
if test "$res_codec" = "MPEG 1 Audio, Layer 3 (MP3)"
then
codec="mp3"
elif test "$res_codec" = "MPEG-4 AAC audio"
then
codec="m4a"elif test "$res_codec" = "Vorbis"
then
codec="ogg"
else
# codec inconnu : pas de copie
copie=0
fi
Tu peux remplacer les if, elif, else par la commande case
if [ -z "$titre" ]
then
nom="(a_trier) $i.$codec"
fi
if [ -z "$artiste" ]
then
artiste="a_trier"
fi
if [ -z "$album" ]
then
album="a_trier"
fi
Tu peux remplacer par :
[ -z "$titre" ] && nom="(a_trier) $i.$codec"
[ -z "$artiste" ] && artiste="a_trier"
-z "$album" ] && album="a_trier
Hors ligne
#14 Le 07/06/2011, à 23:41
- tirom14
Re : [Script] Rangement de fichiers musicaux
Ouaip ouai....
Bon bin apparament faut que je pratique encors le script, c'est franchement pas au point !
Merci beaucoup pour vos conseils !
Hors ligne
#15 Le 09/06/2011, à 00:57
- FRUiT
Re : [Script] Rangement de fichiers musicaux
Le principal c'est que ça marche. Après c'est du chipotage, pour aider (et s'améliorer).
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#16 Le 10/06/2011, à 13:43
- BFB
Re : [Script] Rangement de fichiers musicaux
Je n'ai pas testé le scritpt, mais en lisant le code, je me demande où se trouve la gestion des fichiers, dossiers, etc, contenant des espaces?
Hors ligne
#17 Le 10/06/2011, à 17:50
- FRUiT
Re : [Script] Rangement de fichiers musicaux
Bah
for i in *
Là c'est tout bon. Et même félicitations de ne pas être tombé dans le for truc in $(ls) !!
cp "$pwd/$i" "$nom"
Là aussi
Ca semble correct, que te faut-il de plus ?
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#18 Le 10/06/2011, à 18:11
- AnsuzPeorth
Re : [Script] Rangement de fichiers musicaux
Et il vaut mieux réduire le nombre de pipes (et de programmes externes appelés), par exemple :
titre=`echo "$tag" | grep TITLE | cut -f 2 -d =`
Peut être réduit en :
titre=$(echo "$tag" | awk 'BEGIN { FS="`" } /TITLE/ { print $2 }')
Pour chipoter alors
titre=$(awk 'BEGIN { FS="`" } /TITLE/ { print $2 }' <<< "$tag" )
Bien que je me demande si l'interpréteur awk ne serait pas plus lourd qu'un grep et cut ?
Je me souviens d'essais, où l'utilisation de plusieurs cut était bcp plus rapide qu'une ER avec sed.
Dernière modification par AnsuzPeorth (Le 10/06/2011, à 18:13)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#19 Le 10/06/2011, à 18:38
- FRUiT
Re : [Script] Rangement de fichiers musicaux
Bien que je me demande si l'interpréteur awk ne serait pas plus lourd qu'un grep et cut ?
Je me souviens d'essais, où l'utilisation de plusieurs cut était bcp plus rapide qu'une ER avec sed.
Personnellement, je préfère quand même n'ouvrir qu'un seul sous-shell qu'une multitude, et avec un seul et unique outil qui sait tout faire à la fois (ça fait qu'une seule syntaxe à étudier). Le gain en temps de commande est peut-être moins bon, mais ça utilise moins de ressources, et je gagne du temps à ne pas apprendre plusieurs commandes. De plus awk se retrouve dans un grand nombre de systèmes *nix, et ses possibilités sont époustouflantes.
Mais bon, c'est un choix personnel.
Dernière modification par FRUiT (Le 10/06/2011, à 18:39)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#20 Le 10/06/2011, à 18:50
- AnsuzPeorth
Re : [Script] Rangement de fichiers musicaux
ses possibilités sont époustouflantes.
Entièrement d'accord, l'apprentissage aussi est époustouflant
Mais bon, c'est un choix personnel.
Je disais ça comme ça, une réflexion en passant.
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne