Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/10/2010, à 22:03

tirom14

[Script] Rangement de fichiers musicaux

Hello !!!! big_smile


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 !! big_smile

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 smile)

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 smile

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 big_smile
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 smile

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 hmm

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 wink

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. wink
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 wink

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 ! tongue

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

FRUIT a écrit :

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 big_smile

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

AnsuzPeorth a écrit :

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 big_smile

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