IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Mes MP3 et les IDV


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut Mes MP3 et les IDV


    Bonjour à vous !

    J'ai un baladeur mp3 qui contient de la musique. Ces fichiers sont indexés dans la mémoire du baladeur (disque dur) par une procédure interne.
    En fait, le baladeur fait son indexation personnelle des fichiers qui lui sont passés par le logiciel de transfert.

    Ainsi, tous mes mp3 sont dans un répertoire présent sur le disque dur et on tous des noms de fichier barbares tel que "d1988e57.mp3".

    Ce n'est pas du tout pratique pour gérer la musique sur mon ordinateur, alors je
    voudrai faire un script qui renomme chacun de ces fichiers.

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Par défaut
    Il y a un programme pour Gnome qui fait ça c'est easytag. Tu peux renommer les fichiers d'un répertoire dans le format que tu veux en utilisant les tags.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    Merci pour cette suggestion, mais je ne veux pas installer de programme avec GUI, surtout si c'est un logiciel Gnome

    C'est surtout que je n'ai pas vocation à utiliser une application de ce genre couramment, donc je ne vois pas trop l'interêt d'installer un de ces logiciels.
    Il me faut juste classer ces satanés fichiers, du plus petit au plus grand (par exemple Album < Artiste < Genre ) et 'en aurai fini avec ça.

    De plus, c'est un exercice avec une certaine valeur ajoutée pour ce qui concerne l'acquisition de connaissances en script shell

    J'ai écris un script shell finalement, mais je pense que (s'il marche ) il n'est pas du tout optimal.
    Les difficultés que j'ai rencontré sont :
    • impossible d'employer la commande sed avec un pipe (?), donc je me suis servi de fichiers d'index.
    • La substitution avec sed ne fonctionne pas lorsqu'elle rencontre des noms de fichiers contenant des caractères pouvant être employés comme opérateurs dans des expression régulières : *,+,.
      Ainsi, certains espaces que je voulais faire disparaître ne partait pas, il fallait faire plusieurs passes.
    • Et la fin, je crois que c'est le pire. Je ne sais pas si une construction de ce genre existe (faire correspondre chaque ligne d'un fichier avec celle d'un autre fichier), mais vu comme j'ai commencé, je ne peux terminer que comme ça. J'ai juste le sentiment (sans test préalable) que ça ne va pas marcher.

    Donc une solution (pas très élégante) serait de traiter chacun des fichiers ligne par ligne. Comme à chaque nom de fichier correspond un titre à la même ligne dans l'autre fichier et un répertoire de destination dans encore un autre fichier, il doit être possible de faire quelque chose, mais c'est vraiment pas propre.

    (Dites moi si je me trompe, mais utiliser des fichiers intermédiaires est un hérésie du script shell. Il faut toujours se servir de stdin et stdout)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #!/bin/bash
    
    for i in $(ls -1 ./StockageBrut/*.mp3); do
    
            export AuteurName=$(mp3info -p "%a" $i) 
            export Title=$(mp3info -p "%t" $i)
    #ici on extrait le nom de l'auteur et le titre contenus dans l'IDV du morceau
    
            if [ "$AuteurName" != "" ]; then
                    
                    echo -e "$AuteurName" >> ./RepClassement/ListeAuteurs.txt 
                    echo "$Title" >> ./RepClassement/ListeFilename.txt 
                    echo "$i" >> ./RepClassement/ListeNomCourant.txt fi;
    #Ici on remplit les fichiers d'indexation
    done;
    
    #Conversion en UTF8
    iconv -f ISO8859-1 -t UTF8 -o ./RepClassement/ListeAuteursUTF8.txt ./RepClassement/ListeAuteurs.txt
    #Là c'est la conversion (jaime pas les <E09> à la place des é
    iconv -f ISO8859-1 -t UTF8 -o ./RepClassement/ListeFilenameUTF8.txt ./RepClassement/ListeFilename.txt
    
    sed "s/[/\ \\]/_/w ./RepClassement/ListeRepAuteurs1.txt" ./RepClassement/ListeAuteursUTF8.txt
    sed "s/[/\ \\]/_/w ./RepClassement/ListeRepAuteurs2.txt" ./RepClassement/ListeRepAuteurs1.txt
    sed "s/[/\ \\]/_/w ./RepClassement/ListeRepAuteurs3.txt" ./RepClassement/ListeRepAuteurs2.txt
    sed "s/[/\ \\]/_/w ./RepClassement/ListeRepAuteurs4.txt" ./RepClassement/ListeRepAuteurs3.txt
    sed "s/[/\ \\]/_/w ./RepClassement/ListeRepAuteurs5.txt" ./RepClassement/ListeRepAuteurs4.txt
    #ici c'est pas beau c'est juste pour enlever les /, \ et les espaces des noms traités
    #mais il faut plusieurs passes.
    sed "s/[/\ \\]/_/w .RepClassement/ListeFilename1.txt" ./RepClassement/ListeFilenameUTF8.txt
    sed "s/[/\ \\]/_/w .RepClassement/ListeFilename2.txt" ./RepClassement/ListeFilename1.txt
    sed "s/[/\ \\]/_/w .RepClassement/ListeFilename3.txt" ./RepClassement/ListeFilename2.txt
    sed "s/[/\ \\]/_/w .RepClassement/ListeFilename4.txt" ./RepClassement/ListeFilename3.txt
    sed "s/[/\ \\]/_/w .RepClassement/ListeFilename5.txt" ./RepClassement/ListeFilename4.txt
    
    #Là ça ne marche pas et ça ne marchera jamais. Il faut faire un test sur l'existence
    #de chaque répertoire, et s'il n'existe pas le créer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567
    for k in $(cat ./RepClassement/ListeRepAuteurs5.txt); do
    if [ ! -d $k ]; then
    mkdir $k
    fi
    #Et là je fais quoi pour parser les deux autres fichiers ?
    mv "$LeNomCourantFichier" ./StockageClassed/"$LeTitreDeLaChanson".mp3
    done
    mkdir ./StockageClassed/$(less ./RepClassement/ListeRepAuteurs5.txt) mv -i $(less ./RepClassement/ListeNomCourant.txt) $(less ./RepClassement/ListeRepAuteur5.txt)$(ListeFilename5.txt)
    Je préfère ne pas tester le script, vu tous les mv qu'il comporte, je préfère ne pas faire de bêtise.

    Une construction "sensée" serait de traiter en même temps le nom de fichier, le titre, la création du répertoire de destination, le déplacement avec des tests sur l'existence où nom d'un répertoire le tout dans la même boucle for, mais je ne sais pas comment traiter les chaînes avec sed depuis l'entrée standard. Je sais que sed par défaut redirige tout vers la sortie standard, mais pour l'entrée il lui faut un fichier. Je pourrai à chaque fois créer un fichier, mais ce n'est pas très optimisé. De plus, sauriez vous comment éviter de faire le travail en plusieurs passes ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR 9] Enregistrer mes formules pour les ré-utiliser
    Par labartho dans le forum Formules
    Réponses: 1
    Dernier message: 06/05/2009, 13h37
  2. J'ai perdu mes tables, comment les récupérer?
    Par sofien dans le forum Administration
    Réponses: 0
    Dernier message: 16/05/2008, 14h56
  3. Ecouter mes mp3 depuis internet
    Par ooyeah dans le forum Windows XP
    Réponses: 7
    Dernier message: 17/05/2007, 02h29
  4. Réponses: 14
    Dernier message: 28/04/2007, 12h25
  5. Réponses: 3
    Dernier message: 12/04/2007, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo