Page 1 sur 1
[script] Trier musique
Publié : dim. 05 nov. 2017, 22:09
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
Re: [script] Trier musique
Publié : lun. 06 nov. 2017, 22:10
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.
Re: [script] Trier musique
Publié : lun. 06 nov. 2017, 23:28
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 ?
Re: [script] Trier musique
Publié : mar. 07 nov. 2017, 18:46
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.
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 ?
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...
Re: [script] Trier musique
Publié : mer. 08 nov. 2017, 23:19
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
Re: [script] Trier musique
Publié : jeu. 09 nov. 2017, 07:33
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...
Re: [script] Trier musique
Publié : jeu. 09 nov. 2017, 11:48
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
Re: [script] Trier musique
Publié : jeu. 09 nov. 2017, 18:23
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...
Re: [script] Trier musique
Publié : jeu. 09 nov. 2017, 19:23
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 ?
Re: [script] Trier musique
Publié : ven. 10 nov. 2017, 18:01
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...
