#51 Le 10/03/2012, à 14:57
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Par rapport à
taille_dispo=$((${taille_dispo}-${taille_music}))
les variables sont moins protégés, non ?
Hors ligne
#52 Le 10/03/2012, à 15:13
- Postmortem
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Salut,
Non non, les variables sont des nombres donc pas de souci. Du moins, pas à ma connaissance !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#53 Le 10/03/2012, à 15:25
- pingouinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Si on est fainéant, ceci marche aussi :
(( taille_dispo -= taille_music ))
Hors ligne
#54 Le 10/03/2012, à 15:41
- Postmortem
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Si on est fainéant, ceci marche aussi :
(( taille_dispo -= taille_music ))
Ah ben oui, tant qu'à être fainéant !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#55 Le 05/03/2013, à 17:27
- capkurt
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Salut à tous,
Bien content d'utiliser ce script, j'apporte ma petite pierre à l'édifice en ajoutant quelques options :
- Ajout d'une interface graphique (j'enlève les notifications qui n'ont plus beaucoup de sens avec une interface graphique)
- La suppression du oontenu du répertoire de destination en option,
- Choix des dossiers d'origine et de destination,
- Choix du mode de copie (par occurrence - version de cracolinux -, en utilisant la taille max disponible ou en définissant la taille qu'on veut attribuer à la musique copiée).
Surement, beaucoup a redire sur mon code. Correction des fautes d'orthographe à la prochaine version.
En souhaitant que ça serve à d'autres!
@+
#!/bin/bash
######################################################
# Script de copie aléatoire de musique sur baladeur #
# #
#Écrit par lylambda, et capkurt inspiré par stefP #
# Version 8 #
# http://forum.ubuntu-fr.org/viewtopic.php?id=200739 #
######################################################
# Définir le répertoire d'origine
# /!\ À modifier selon le baladeur
rep_dest="/media/MUSIC/MUSIC"
# Définir le répertoire d'origine
# /!\ À modifier selon l'emplacement de la bibliothèque musicale
rep_orig="${HOME}/Musique"
# Décommenter la ligne suivante pour utiliser le mode debug en terminal
#dbg=yes
#############################
### ASSISTANT EN MODE GUI ###
#############################
Control_init() {
[ $dbg ] && echo "(A) : Vérification par l'utilisateur des dossiers à utiliser"
zenity --question --width=400 --height=200 --title="Copie Aléa de mp3" --text="Vérifier les informations ci-dessous: \n\n Repertoire de destination: \n$rep_dest \n\n Cette information est-elle correcte?"
if [ $? = 0 ]
then
[ $dbg ] && echo " Le répertoire de destination est correcte; aucun changement"
else
# Ouverture de la fenêtre pour choisir le répertoire de destination
rep_dest=$(zenity --file-selection --directory --title="Choix du répertoire de destination" --filename $rep_dest )
[ $dbg ] && echo " Les répertoires doivent être redéfini"
fi
zenity --question --width=400 --height=200 --title="Copie Aléa de mp3" --text="Vérifier les informations ci-dessous: \n\n Repertoire d'origine: \n$rep_orig \n \n Cette informations est-elle correcte?"
if [ $? = 0 ]
then
[ $dbg ] && echo " Le répertoire d'origine est correcte; aucun changement"
else
# Ouverture de la fenêtre pour choisir le répertoire d'origine
rep_dest=$(zenity --file-selection --directory --title="Choix du répertoire d'origine" --filename $rep_orig )
[ $dbg ] && echo " Les répertoires doivent être redéfini"
fi
}
Dell_rep_dist_GUI() {
if [ ! $(ls $rep_dest/|wc -l) = 0 ]
then
[ $dbg ] && echo "(B) : Le répertoire de destination n'est pas vide"
dell_rep_dist=$(zenity --question --width=400 --height=200 --title="Copie Aléa de mp3" --text="Voulez-vous supprimer le contenu du repertoire de destination :\n\n $rep_dest " )
if [ $? = 0 ]
then
# Vider le répertoire de destination
rm -r ${rep_dest}/*
[ $dbg ] && echo " Le contenu du répertoire de destination est supprimé"
else
[ $dbg ] && echo " Le contenu du répertoire de destination ne sera supprimé"
fi
fi
}
GetModel_GUI() {
model=$(zenity --list --radiolist --width=400 --height=200 --title="Copie Aléa de mp3" --text="Choisissez le type de copie :\n" --column="" --column="" \
FALSE "Utilisé un nombre d'occurence" \
FALSE "Utilisé la taille maximum du média" \
FALSE "Utilisé une taille de selection" )
# Quitter si aucune sélection
if [[ -z ${model} ]]; then
exit 1
elif [[ $model == "Utilisé un nombre d'occurence" ]] ; then
occurence=$(zenity --entry --width=400 --height=200 --title="Copie Aléa de mp3" --text="Entrez le nombre d'occurence :\n")
occurence=$((${occurence}-1))
elif [[ $model == "Utilisé une taille de selection" ]] ; then
taille_dispo=$(zenity --entry --width=400 --height=200 --title="Copie Aléa de mp3" --text="Entrez la taille de musique a copier :\nLa Taille est en Mio \n")
taille_dispo=$((${taille_dispo}*1000))
fi
}
CP_MP3 () {
if [[ -d ${rep_dest} && -d ${rep_orig} ]]; then
if [[ ! $model == "Utilisé une taille de selection" ]] ; then
# Définir la taille disponible sur le répertoire de destination
taille_dispo=`df ${rep_dest} | awk '{print $4}' | head -2 | tail -1`
[ $dbg ] && echo "(C) : Taille disponible : ${taille_dispo}"
fi
# Lancement de la fenêtre de chargement
zenity --progress --width=400 --height=200 --pulsate --auto-close &
zpid=$!
find -L ${rep_orig} -type f \( -iname "*.mp3" -o -iname "*.ogg" -o -iname "*.wma" \) | sort -R | sed -e "s#${rep_orig}/##g" > ${rep_orig}/list_music
# Si le répertoire d'origine contient de la musique
if test -s ${rep_orig}/list_music; then
[ $dbg ] && echo "(D) : Création de la liste des morceaux disponibles"
# Initialiser le compteur de morceaux à copier
nbr_copie=0
taille_dispo_init=${taille_dispo}
# Lancer la boucle définissant les morceaux à copier pour remplir le répertoire de destination
while true; do
# Sélectionner un morceau
fic_music=`head -n $((${nbr_copie}+1)) ${rep_orig}/list_music | tail -1`
# Définir la taille du morceau
taille_music=`du -s "${rep_orig}/${fic_music}"| awk '{print $1}'`
# Si la taille disponible est strictement inférieur à la taille du morceau :
if test "${taille_dispo}" -lt "${taille_music}"; then
# Créer dans le répertoire d'origine, un nouveau fichier texte listant que les morceaux sélectionnés
head -n ${nbr_copie} ${rep_orig}/list_music | sort > ${rep_orig}/select_music
[ $dbg ] && echo "(E) : Création de la liste des morceaux sélectionnés"
# Quitter la boucle
break
elif [ ! -e ${occurence} ] && [ $occurence -lt $nbr_copie ]
then
# Créer dans le répertoire d'origine, un nouveau fichier texte listant que les morceaux sélectionnés
head -n ${nbr_copie} ${rep_orig}/list_music | sort > ${rep_orig}/select_music
[ $dbg ] && echo "(E) : Création de la liste des morceaux sélectionnés"
# Quitter la boucle
break
fi
# Sinon actualiser de la taille disponible
taille_dispo=$((${taille_dispo}-${taille_music}))
# Incrémenter le compteur de morceaux de 1
nbr_copie=$((${nbr_copie}+1))
[ $dbg ] && echo "${nbr_copie} : Sélection de ${fic_music}" && echo " Taille prise = ${taille_music} - Taille disponible = ${taille_dispo} - Taille disponible initiale = ${taille_dispo_init}"
done
kill $zpid
cpt=`cat ${rep_orig}/select_music | wc -l`
i=0
IFS=$'\n'
for morceau in $(cat ${rep_orig}/select_music); do
i=$(($i+1))
echo $((${i}*100/${cpt}))
cd ${rep_orig} && cp "${morceau}" "${rep_dest}" && cd
done | zenity --progress --width=400 --height=200 --percentage=0 --auto-close
unset IFS
# Supprimer les fichiers texte temporaires
rm ${rep_orig}/list_music
rm ${rep_orig}/select_music
[ $dbg ] && echo "(F) : Suppression des fichiers temporaires"
fi
else
zenity --error --text="Une erreur est survenu. Les dossiers des destination et d'origine sont incorrect."
Control_init
Dell_rep_dist_GUI
GetModel_GUI
CP_MP3
fi
}
##############
### SCRIPT ###
##############
Control_init
Dell_rep_dist_GUI
GetModel_GUI
CP_MP3
[ $dbg ] && echo "Fin : vous pouvez quitter le terminal"
exit 0
Hors ligne
#56 Le 06/03/2013, à 11:48
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Ce petit script n'a décidément pas finis d'évoluer !
J'aime bien le principe de l'interface graphique. En fait, j'apprécie surtout la barre de progression, mais l’intérêt des dialogues précédents ont tout leur intérêt pour rendre le script utilisable facilement pour tout le monde. Merci
Par contre, j'ai rencontrer un souci : les morceaux copiés ne sont plus rangés comme l'arborescence d'origine de la bibliothèque (auteur/album/morceaux pour moi), mais en vrac dans le répertoire MUSIC du baladeur (testé avec les options "ne pas effacer" et "utiliser tout l'espace disponible".
Je creuserais un peu le code quand j'aurais plus de temps disponible.
Hors ligne
#57 Le 06/03/2013, à 11:54
- stefP
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Génial, 5 ans après, d'autres prennent le relais
Je le note pour tester cette nouvelle version
Hors ligne
#58 Le 07/03/2013, à 21:55
- capkurt
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
@ lylambda: En effet, j'ai enlevé l'option "--parents" sur la commande cp. C'est facile à rajouter. Je mettrais l'option sur la prochaine version.
Hors ligne
#59 Le 09/03/2013, à 10:57
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Si ce n'est que ça, c'est effectivement vite corrigeable
Penses-tu que l'on pourrait éviter d'avoir systématiquement les dialogues préparatoires ? C'est à dire, pouvoir garder ses préférences pour la plupart du temps et changer les options (dossier, méthode de copie,…) que au besoin.
Ça en ferait un véritable petit logiciel, mais il me semble que ce serait un peu mieux, ergonomiquement.
Hors ligne
#60 Le 05/01/2014, à 20:14
- racyno
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Bravo pour ce script, mais qui plante lorsque le nom d'un répertoire contient un espace et passe les morceaux de musique contenant un espace avec un message d'erreur.
Il faut aussi remplacer la ligne (au début) :
rep_dest=$(zenity --file-selection --directory --title="Choix du répertoire d'origine" --filename $rep_orig )
par :
rep_orig=$(zenity --file-selection --directory --title="Choix du répertoire d'origine" --filename $rep_orig )
Dernière modification par racyno (Le 05/01/2014, à 20:28)
Hors ligne
#61 Le 06/01/2014, à 23:23
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Merci pour cette correction de coquille
Il y a une solution, pour les bugs que tu as mentionnés ?
Hors ligne
#62 Le 07/01/2014, à 14:46
- racyno
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Ah non c'est les chansons contenant des guillemets qu'il passe avec un message d'erreur.
Il n'y a pas une astuce de double guillemets pour que le script marche, aussi avec les espaces dans les noms de répertoire ?
Hors ligne
#63 Le 07/01/2014, à 15:03
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Il n'y a pas une astuce de double guillemets pour que le script marche, aussi avec les espaces dans les noms de répertoire ?
Pas que je sache… Il va falloir renommer tout tes répertoires ;-)
Dernière modification par lylambda (Le 07/01/2014, à 15:04)
Hors ligne
#64 Le 07/01/2014, à 15:06
- Postmortem
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Il n'y a pas une astuce de double guillemets pour que le script marche, aussi avec les espaces dans les noms de répertoire ?
Pas que je sache… Il va falloir renommer tout tes répertoires ;-)
Si si !! Tu peux mettre le script que tu utilises, on pourra y jeter un oeil.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#65 Le 08/01/2014, à 16:28
- racyno
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Voici le script simplement avec la ligne que j'ai indiqué corrigée :
#!/bin/bash
######################################################
# Script de copie aléatoire de musique sur baladeur #
# #
#Écrit par lylambda, et capkurt inspiré par stefP #
# Version 8 #
# http://forum.ubuntu-fr.org/viewtopic.php?id=200739 #
######################################################
# Définir le répertoire d'origine
# /!\ À modifier selon le baladeur
rep_dest="/media/KLUBBY"
# Définir le répertoire d'origine
# /!\ À modifier selon l'emplacement de la bibliothèque musicale
rep_orig="${HOME}/Musique/999_A_écouter"
# Décommenter la ligne suivante pour utiliser le mode debug en terminal
#dbg=yes
#############################
### ASSISTANT EN MODE GUI ###
#############################
Control_init() {
[ $dbg ] && echo "(A) : Vérification par l'utilisateur des dossiers à utiliser"
zenity --question --width=400 --height=200 --title="Copie Aléa de mp3" --text="Vérifier les informations ci-dessous: \n\n Repertoire de destination: \n$rep_dest \n\n Cette information est-elle correcte?"
if [ $? = 0 ]
then
[ $dbg ] && echo " Le répertoire de destination est correcte; aucun changement"
else
# Ouverture de la fenêtre pour choisir le répertoire de destination
rep_dest=$(zenity --file-selection --directory --title="Choix du répertoire de destination" --filename $rep_dest )
[ $dbg ] && echo " Les répertoires doivent être redéfini"
fi
zenity --question --width=400 --height=200 --title="Copie Aléa de mp3" --text="Vérifier les informations ci-dessous: \n\n Repertoire d'origine: \n$rep_orig \n \n Cette informations est-elle correcte?"
if [ $? = 0 ]
then
[ $dbg ] && echo " Le répertoire d'origine est correcte; aucun changement"
else
# Ouverture de la fenêtre pour choisir le répertoire d'origine
rep_orig=$(zenity --file-selection --directory --title="Choix du répertoire d'origine" --filename $rep_orig )
[ $dbg ] && echo " Les répertoires doivent être redéfini"
fi
}
Dell_rep_dist_GUI() {
if [ ! $(ls $rep_dest/|wc -l) = 0 ]
then
[ $dbg ] && echo "(B) : Le répertoire de destination n'est pas vide"
dell_rep_dist=$(zenity --question --width=400 --height=200 --title="Copie Aléa de mp3" --text="Voulez-vous supprimer le contenu du repertoire de destination :\n\n $rep_dest " )
if [ $? = 0 ]
then
# Vider le répertoire de destination
rm -r ${rep_dest}/*
[ $dbg ] && echo " Le contenu du répertoire de destination est supprimé"
else
[ $dbg ] && echo " Le contenu du répertoire de destination ne sera supprimé"
fi
fi
}
GetModel_GUI() {
model=$(zenity --list --radiolist --width=400 --height=200 --title="Copie Aléa de mp3" --text="Choisissez le type de copie :\n" --column="" --column="" \
FALSE "Utilisé un nombre d'occurence" \
FALSE "Utilisé la taille maximum du média" \
FALSE "Utilisé une taille de selection" )
# Quitter si aucune sélection
if [[ -z ${model} ]]; then
exit 1
elif [[ $model == "Utilisé un nombre d'occurence" ]] ; then
occurence=$(zenity --entry --width=400 --height=200 --title="Copie Aléa de mp3" --text="Entrez le nombre d'occurence :\n")
occurence=$((${occurence}-1))
elif [[ $model == "Utilisé une taille de selection" ]] ; then
taille_dispo=$(zenity --entry --width=400 --height=200 --title="Copie Aléa de mp3" --text="Entrez la taille de musique a copier :\nLa Taille est en Mio \n")
taille_dispo=$((${taille_dispo}*1000))
fi
}
CP_MP3 () {
if [[ -d ${rep_dest} && -d ${rep_orig} ]]; then
if [[ ! $model == "Utilisé une taille de selection" ]] ; then
# Définir la taille disponible sur le répertoire de destination
taille_dispo=`df ${rep_dest} | awk '{print $4}' | head -2 | tail -1`
[ $dbg ] && echo "(C) : Taille disponible : ${taille_dispo}"
fi
# Lancement de la fenêtre de chargement
zenity --progress --width=400 --height=200 --pulsate --auto-close &
zpid=$!
find -L ${rep_orig} -type f \( -iname "*.mp3" -o -iname "*.ogg" -o -iname "*.wma" \) | sort -R | sed -e "s#${rep_orig}/##g" > ${rep_orig}/list_music
# Si le répertoire d'origine contient de la musique
if test -s ${rep_orig}/list_music; then
[ $dbg ] && echo "(D) : Création de la liste des morceaux disponibles"
# Initialiser le compteur de morceaux à copier
nbr_copie=0
taille_dispo_init=${taille_dispo}
# Lancer la boucle définissant les morceaux à copier pour remplir le répertoire de destination
while true; do
# Sélectionner un morceau
fic_music=`head -n $((${nbr_copie}+1)) ${rep_orig}/list_music | tail -1`
# Définir la taille du morceau
taille_music=`du -s "${rep_orig}/${fic_music}"| awk '{print $1}'`
# Si la taille disponible est strictement inférieur à la taille du morceau :
if test "${taille_dispo}" -lt "${taille_music}"; then
# Créer dans le répertoire d'origine, un nouveau fichier texte listant que les morceaux sélectionnés
head -n ${nbr_copie} ${rep_orig}/list_music | sort > ${rep_orig}/select_music
[ $dbg ] && echo "(E) : Création de la liste des morceaux sélectionnés"
# Quitter la boucle
break
elif [ ! -e ${occurence} ] && [ $occurence -lt $nbr_copie ]
then
# Créer dans le répertoire d'origine, un nouveau fichier texte listant que les morceaux sélectionnés
head -n ${nbr_copie} ${rep_orig}/list_music | sort > ${rep_orig}/select_music
[ $dbg ] && echo "(E) : Création de la liste des morceaux sélectionnés"
# Quitter la boucle
break
fi
# Sinon actualiser de la taille disponible
taille_dispo=$((${taille_dispo}-${taille_music}))
# Incrémenter le compteur de morceaux de 1
nbr_copie=$((${nbr_copie}+1))
[ $dbg ] && echo "${nbr_copie} : Sélection de ${fic_music}" && echo " Taille prise = ${taille_music} - Taille disponible = ${taille_dispo} - Taille disponible initiale = ${taille_dispo_init}"
done
kill $zpid
cpt=`cat ${rep_orig}/select_music | wc -l`
i=0
IFS=$'\n'
for morceau in $(cat ${rep_orig}/select_music); do
i=$(($i+1))
echo $((${i}*100/${cpt}))
cd ${rep_orig} && cp "${morceau}" "${rep_dest}" && cd
done | zenity --progress --width=400 --height=200 --percentage=0 --auto-close
unset IFS
# Supprimer les fichiers texte temporaires
rm ${rep_orig}/list_music
rm ${rep_orig}/select_music
[ $dbg ] && echo "(F) : Suppression des fichiers temporaires"
fi
else
zenity --error --text="Une erreur est survenu. Les dossiers des destination et d'origine sont incorrect."
Control_init
Dell_rep_dist_GUI
GetModel_GUI
CP_MP3
fi
}
##############
### SCRIPT ###
##############
Control_init
Dell_rep_dist_GUI
GetModel_GUI
CP_MP3
[ $dbg ] && echo "Fin : vous pouvez quitter le terminal"
exit 0
Je sais que dans le code, avec des doubles guillemets pour indiquer le chemin du fichier, ça permet que le script accepte les guillemets ou les espaces. Je ne sais plus si c'est '' ou "", 2 fois ' ou 2 fois ".
Hors ligne
#66 Le 07/01/2017, à 12:12
- ferreol
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
bizarre j'ai une erreur en disant que les repertoires de destinations ou d'origine sont mauvais hors j'ai rien changé dans le script.
Hors ligne
#67 Le 07/01/2017, à 12:38
- stefP
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Il faut que tu adaptes les deux lignes à ton environnement :
# Définir le répertoire d'origine
# /!\ À modifier selon le baladeur
rep_dest=[color=#ff0000]"/media/KLUBBY"[/color]
# Définir le répertoire d'origine
# /!\ À modifier selon l'emplacement de la bibliothèque musicale
rep_orig=[color=#ff0000]"${HOME}/Musique/999_A_écouter"[/color]
Dernière modification par stefP (Le 07/01/2017, à 12:38)
Hors ligne
#68 Le 14/01/2017, à 13:33
- ferreol
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Hello merci StefP quand je disais que je n'avais rien changé c'était bien sûr rieen à part les dossiers d'origine et de destination .
Hors ligne