[script] Trier musique
[script] Trier musique
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
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
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [script] Trier musique
Bonsoir,
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:
- 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.
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.»
Re: [script] Trier musique
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 :
Ceci ne sert à rien, si ?
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
Code : Tout sélectionner
echo $dir
dir=`ls -d */ | head -n1`
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [script] Trier musique
Les variables sont là pour ça.
Code : Tout sélectionner
playlist=$(mktemp)
Ben... Si tu veux avoir la liste des répertoires, tu te compliques la vie surtout.Shaaake a écrit : ↑lun. 06 nov. 2017, 23:28Déjà, dans la partie :Ceci ne sert à rien, si ?Code : Tout sélectionner
while [[ -d $dir ]]; do cd "$dir" echo $dir dir=`ls -d */ | head -n1` done
Code : Tout sélectionner
echo $dir dir=`ls -d */ | head -n1`
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 -
«The following statement is not true. The previous statement is true.»
Re: [script] Trier musique
J'ai envoyé le script, donc si je fait playlist=$(mktemp)
Si je mets
Pour la partie
Je vois pas trop à quoi sert le ls et de faire echo $dir
J'ai pas compris pour
Et également, que sert - après les commandes ? Je le vois après su - et là cd -
Merci
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
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 -
Merci
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [script] Trier musique
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).
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 Pour la partie
Je vois pas trop à quoi sert le ls et de faire echo $dirCode : Tout sélectionner
while [[ -d $dir ]]; do cd "$dir" echo $dir dir=`ls -d */ | head -n1` done
Ça affiche la liste des fichiers/répertoires du répertoire courant... On peut donc travailler sur chaque répertoire (dans le "do").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 -
Tu n'as qu'à l'exécuter dans ton home et tu verras bien...
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.»
Re: [script] Trier musique
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
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
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [script] Trier musique
Ça récupère dans $i chaque fichier/répertoire présent.
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.
À 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
Ça doit le faire à peu près...
«The following statement is not true. The previous statement is true.»
Re: [script] Trier musique
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 ?
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 ?
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [script] Trier musique
Comment sont organisés les fichiers que tu veux trier: tous en vrac dans un même répertoire ou dans une arborescence...
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.
Il t'affichera le contenu de 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.»