[script] Trier musique

Applications, problèmes de configuration réseau
Répondre
Shaaake
Hankyu
Messages : 24
Inscription : jeu. 19 oct. 2017, 20:28

[script] Trier musique

Message par Shaaake »

Bonjour, j'ai un script pour trier les musiques dans par Artiste/Album dans ma musique, sauf que j'ai certaines erreurs par moments :

ls: impossible d'accéder à '*/': Aucun fichier ou dossier de ce type
fopen: : id3v2: No such file or directory
fopen: : id3v2: No such file or directory
mkdir: impossible de créer le répertoire « /home/user/Musique/ »: Le fichier existe
mkdir: impossible de créer le répertoire « /home/user/Musique// »: Le fichier existe
mv: impossible d'évaluer '*.mp3': Aucun fichier ou dossier de ce type

Du coup je voulais savoir si il vous serait possible de m'aider à l'arranger, je vous mets la partie en question :

https://pastebin.com/vM0wjcZ9

Pour info, il créée un dossier temp, et extrait l'archive dedans

Déjà pour la partie mkdir, peut-être qu'il vaut mieux mkdir -p ?

J'ai essayé de continuer un peu : https://pastebin.com/1E5E6Ps1

Merci
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [script] Trier musique

Message par FoolEcho »

Bonsoir,
Shaaake a écrit : dim. 05 nov. 2017, 22:09 Du coup je voulais savoir si il vous serait possible de m'aider à l'arranger, je vous mets la partie en question :
Déjà, il ne faut pas partir bille en tête sur du code... on ne sait pas exactement ce que tu prends en entrée (seulement du mp3 ?), comment, etc..

D'autant que ce que tu souhaites, de ce que je comprends, peut se faire via des logiciels existants (style soundkonverter) dès l'extraction/conversion des fichiers (en gros lors de l'extraction, tu peux fabriquer directement ce qui t'intéresse).

Côté script en lui-même:
- bash fournit une commande pour créer des vrais fichiers/répertoires temporaires: mktemp.
- tester l'existence d'un fichier/répertoire pour éviter les écrasements/messages d'erreur (ou mkdir -p effectivement si tu es sûr de ton coup)
- lorsqu'un truc ressemble à une ligne du dessus, faire une fonction (par exemple pour alimenter artiste/album).
- etc.
«The following statement is not true. The previous statement is true.» :nage:
Shaaake
Hankyu
Messages : 24
Inscription : jeu. 19 oct. 2017, 20:28

Re: [script] Trier musique

Message par Shaaake »

Alors de base le script est fait pour du mp3, mais comme j'utilise du mp3 et du flac il serait effectivement intéressant de rajouter du flac dans le script

Pour mktemp, visiblement c'est avec l'option -d, par contre pour récupérer le nom dans le script je ne sais pas comment faire

mkdir -p n'est pas trop secure ?

Le voilà : https://pastebin.com/kMYpKw0U

Déjà, dans la partie :

Code : Tout sélectionner

 while [[ -d $dir ]]; do
          cd "$dir"
          echo $dir
          dir=`ls -d */ | head -n1`
 done
Ceci ne sert à rien, si ?

Code : Tout sélectionner

 echo $dir
 dir=`ls -d */ | head -n1`
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [script] Trier musique

Message par FoolEcho »

Shaaake a écrit : lun. 06 nov. 2017, 23:28Pour mktemp, visiblement c'est avec l'option -d, par contre pour récupérer le nom dans le script je ne sais pas comment faire
Les variables sont là pour ça.

Code : Tout sélectionner

playlist=$(mktemp)
Shaaake a écrit : lun. 06 nov. 2017, 23:28Déjà, dans la partie :

Code : Tout sélectionner

 while [[ -d $dir ]]; do
          cd "$dir"
          echo $dir
          dir=`ls -d */ | head -n1`
 done
Ceci ne sert à rien, si ?

Code : Tout sélectionner

 echo $dir
 dir=`ls -d */ | head -n1`
Ben... Si tu veux avoir la liste des répertoires, tu te compliques la vie surtout.

Code : Tout sélectionner

cd repertoire_a_lister
#i stocke la valeur des fichiers/répertoires dans le répertoire courant
for i in *;do echo $i; done;
cd -
Mais encore une fois, sans plus d'infos c'est du bricolage...
«The following statement is not true. The previous statement is true.» :nage:
Shaaake
Hankyu
Messages : 24
Inscription : jeu. 19 oct. 2017, 20:28

Re: [script] Trier musique

Message par Shaaake »

J'ai envoyé le script, donc si je fait playlist=$(mktemp)

Si je mets $playlist il va pas m’exécuter $(mktemp) ?

Pour la partie

Code : Tout sélectionner

while [[ -d $dir ]]; do
          cd "$dir"
          echo $dir
          dir=`ls -d */ | head -n1`
 done
Je vois pas trop à quoi sert le ls et de faire echo $dir

J'ai pas compris pour

Code : Tout sélectionner

cd repertoire_a_lister
#i stocke la valeur des fichiers/répertoires dans le répertoire courant
for i in *;do echo $i; done;
cd -
Et également, que sert - après les commandes ? Je le vois après su - et là cd -

Merci
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [script] Trier musique

Message par FoolEcho »

Shaaake a écrit : mer. 08 nov. 2017, 23:19 J'ai envoyé le script, donc si je fait playlist=$(mktemp)

Si je mets $playlist il va pas m’exécuter $(mktemp) ?
Pas compris...
Il va stocker le nom du fichier temporaire dans la variable playlist que tu peux ensuite utiliser à ta guise (mktemp -p si tu veux un répertoire).
Shaaake a écrit : mer. 08 nov. 2017, 23:19 Pour la partie

Code : Tout sélectionner

while [[ -d $dir ]]; do
          cd "$dir"
          echo $dir
          dir=`ls -d */ | head -n1`
 done
Je vois pas trop à quoi sert le ls et de faire echo $dir
Comme j'ai dit tu te compliques la vie pour rien... Pour preuve si tu codes sans savoir pourquoi tu le fais...
Shaaake a écrit : mer. 08 nov. 2017, 23:19 J'ai pas compris pour

Code : Tout sélectionner

cd repertoire_a_lister
#i stocke la valeur des fichiers/répertoires dans le répertoire courant
for i in *;do echo $i; done;
cd -
Ça affiche la liste des fichiers/répertoires du répertoire courant... On peut donc travailler sur chaque répertoire (dans le "do").
Tu n'as qu'à l'exécuter dans ton home et tu verras bien...
Shaaake a écrit : mer. 08 nov. 2017, 23:19Et également, que sert - après les commandes ? Je le vois après su - et là cd -
La signification varie. Ici ça permet de revenir dans le répertoire précédent (celui d'avant repertoire_a_lister dans le quel on travaille).

Mais je le dis et le répète: on ne part pas bille en tête dans du code, il faut savoir ce que tu as en entrée et ce que tu veux en sortie (par exemple: réorganiser les fichiers dans des répertoires est différent de les copier d'un répertoire temporaire vers un nouveau... ce genre de choses)...
Le faire en français, en pseudo code avant de programmer...
«The following statement is not true. The previous statement is true.» :nage:
Shaaake
Hankyu
Messages : 24
Inscription : jeu. 19 oct. 2017, 20:28

Re: [script] Trier musique

Message par Shaaake »

J'ai donné le lien du script pour les musiques,

Donc for i in* = pour tous les dossiers ?

Effectivement il me les liste, donc i ça récupère la liste des dossiers dans le répertoire courant ?

cd - = cd .. ?

En fait je veux réorganiser dans mon dossier ~/Musique, avec des sous dossiers ~/Musique/Artiste/Album

C'est pour ça que je faisais un répertoire temporaire pour extraire, puis supprimer ce répertoire temporaire
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [script] Trier musique

Message par FoolEcho »

Shaaake a écrit : jeu. 09 nov. 2017, 11:48Donc for i in* = pour tous les dossiers ?

Effectivement il me les liste, donc i ça récupère la liste des dossiers dans le répertoire courant ?
Ça récupère dans $i chaque fichier/répertoire présent.
Shaaake a écrit : jeu. 09 nov. 2017, 11:48cd - = cd .. ?
Non. cd - est un raccourci pour revenir sur OLDPWD (le répertoire où tu te trouvais avant celui où tu te trouves actuellement) alors que .. te remonte d'un niveau.
Shaaake a écrit : jeu. 09 nov. 2017, 11:48En fait je veux réorganiser dans mon dossier ~/Musique, avec des sous dossiers ~/Musique/Artiste/Album

C'est pour ça que je faisais un répertoire temporaire pour extraire, puis supprimer ce répertoire temporaire
À mon sens tu n'as pas besoin d'un répertoire temporaire.

Code : Tout sélectionner

en entrée: répertoire à analyser

Pour chaque fichier musique (mp3 ?) présent dans répertoire à analyser (à voir si besoin de récursivité si des répertoires sont présents...)
Faire
   artiste=Récupérer tag artiste
   album=Récupérer tag album
   Si ~/Musique/$artiste/$album n'existe pas, le créer
   fin si
   # considérer un emplacement alternatif si $artiste ou $album vide ?
   Déplacer fichier_musique dans ~/Musique/$artiste/$album/
Fin faire
Fin pour
De là tu peux commencer à coder...

Ça doit le faire à peu près...
«The following statement is not true. The previous statement is true.» :nage:
Shaaake
Hankyu
Messages : 24
Inscription : jeu. 19 oct. 2017, 20:28

Re: [script] Trier musique

Message par Shaaake »

Pour en entrée répertoire à analyser tu veux dire quoi ?

D'ailleurs quelle est la différence entre

artist=`id3v2 -l "$track" | grep "TPE1" | cut -d':' -f2 | sed -r 's/\s//'`

Et
artist=$(id3v2 -l "$track" | grep "TPE1" | cut -d':' -f2 | sed -r 's/\s//') ?

Si je mets aussi par exemple

dossiertemporaire=$(mktemp -p)

Si je fais ensuite $dossiertemporaire il va m'exécuter la commande ou récupérer la variable ?

Et comment je dois faire si je veux par exemple le ré exécuter au lieu de récupérer la variable ?
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [script] Trier musique

Message par FoolEcho »

Shaaake a écrit : jeu. 09 nov. 2017, 19:23 Pour en entrée répertoire à analyser tu veux dire quoi ?
Comment sont organisés les fichiers que tu veux trier: tous en vrac dans un même répertoire ou dans une arborescence...
Shaaake a écrit : jeu. 09 nov. 2017, 19:23D'ailleurs quelle est la différence entre

artist=`id3v2 -l "$track" | grep "TPE1" | cut -d':' -f2 | sed -r 's/\s//'`

Et
artist=$(id3v2 -l "$track" | grep "TPE1" | cut -d':' -f2 | sed -r 's/\s//') ?
Les 2 sont équivalentes. Il s'agit de la substitution de commande, elle lance un sous-shell... ce qui te permet de récupérer la sortie de la commande.
Shaaake a écrit : jeu. 09 nov. 2017, 19:23Si je mets aussi par exemple

dossiertemporaire=$(mktemp -p)

Si je fais ensuite $dossiertemporaire il va m'exécuter la commande ou récupérer la variable ?
Il t'affichera le contenu de la variable.
Shaaake a écrit : jeu. 09 nov. 2017, 19:23Et comment je dois faire si je veux par exemple le ré exécuter au lieu de récupérer la variable ?
Faut faire des fonctions...

Pour info, on ne va pas continuer comme ça longtemps. Je ne forme pas les gens au bash... Y a des enseignants, des manuels, des tutos pour ça... :|
«The following statement is not true. The previous statement is true.» :nage:
Répondre