#26 Le 07/03/2012, à 20:39
- kamui57
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Salut!
Peut-être que sort -R pourrait réduire considérablement la taille du script.
Style :find ${rep_orig} -type f -iname "*.mp3" | sort -R > listing_mp3_aléatoire
Ensuite, tu prends le nombre de lignes dont tu as besoin à partir du début.
avec tail ou head (prendre les x dernières ou premières lignes):
find ${rep_orig} -type f -iname "*.mp3" | sort -R | tail -n $nombre > listing_mp3_aléatoire
find ${rep_orig} -type f -iname "*.mp3" | sort -R | head -n $nombre > listing_mp3_aléatoire
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#27 Le 07/03/2012, à 23:05
- cracolinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
#!/bin/bash
# Définir le répertoire de destination
# /!\ À modifier selon le baladeur
rep_dest="/media/trucmuche/musique"
# Définir le répertoire d'origine
# /!\ À modifier selon l'emplacement de la bibliothèque musicale
rep_orig="~/Musique"
[[ $1 == "" ]] && exit 1
nombre_tracks=$1
test_nombre=0
#++#echo "Transfert musicale aléatoire de ${rep_orig} vers ${rep_dest}"
# Si le répertoire de destination existe :
if [[ -d ${rep_dest} ]]; then
# Afficher une bulle de notification
#~ notify-send -i music-player "Random Music Copy" "\nSuppression des anciens morceaux"
echo "Suppression des anciens morceaux"
# Vider le répertoire de destination
rm -r ${rep_dest}/*
# listing
find ${rep_orig} -type f -iname "*.mp3" | sort -R > ${rep_orig}/listmusic
#copie
while read line
do
((test_nombre++))
echo "COPIE de $(basename "$line")"
cp "$line" "${rep_dest}"
[[ $test_nombre == $nombre_tracks ]] && break
done < ${rep_orig}/listmusic
#nettoyage
rm ${rep_orig}/listmusic
echo "FINI"
fi
Voilà une version qui prend comme argument le nombre de fichiers voulus.
Hors ligne
#28 Le 08/03/2012, à 15:19
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Merci à vous deux !
Comme je souhaites que le script reste générique (donc utilisable par qui veut), je préfère que le nombre de morceaux à copier soit calculé en fonction de la place disponible sur le baladeur.
Du coup, j'ai réécrit le script en utilisant la commande sort -R pour définir une liste de morceaux aléatoires qui remplis le baladeur en une fois au maximum de sa capacité. Ça complique un peu le script vis à vis de ce que vous proposez. Mais tout de même, au revoir la commande perl et le test de remise en jeu :-)
Il garde globalement les fonctions précédentes :
- Contrôle du montage du baladeur. Interruption du script en son absence
+ Contrôle de la présence de la musithèque. Interruption du script en son absence
+ Contrôle de la présence de morceaux dans la musithèque. Interruption du script en leur absence
- Suppression des anciens morceaux
- Sélection de tout les ogg, mp3 et wav de la musithèque
+ Prise en compte des répertoires derrière des liens symboliques (ajout de l'option -L à find)
- Remplissage du baladeur avec une liste aléatoire de morceaux
- La copie s'ajuste à la taille disponible et s'effectue en une fois
- Les morceaux sont rangés automatiquement selon les dossiers de tri de la musithèque (ex : [Auteur]/[Album])
- Indication du bon déroulement du script via Notify-OSD [edit]
+ Un mode verbeux disponible pour les sorties en terminal
Bon, probablement qu'un pro ou un puriste s'arracherait les cheveux à la vue du résultat, mais il fait bien ce que je lui demande ^^
#!/bin/bash
######################################################
# Script de copie aléatoire de musique sur baladeur #
# Écrit par lylambda, inspiré par stefP #
# Version 5 #
# Shell : Supprimez #++# pour activer les sorties #
# http://forum.ubuntu-fr.org/viewtopic.php?id=200739 #
######################################################
# Définir le répertoire de destination
# /!\ À 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"
#++#echo "Transfert musicale aléatoire de ${rep_orig} vers ${rep_dest}"
# Si le répertoire de destination existe :
if [[ -d ${rep_dest} && -d ${rep_orig} ]]; then
# Afficher une notification
notify-send -i music-player "Random Music Copy" "\nSuppression des anciens morceaux"
#++#echo "Suppression des anciens morceaux"
# Vider le répertoire de destination
rm -r ${rep_dest}/*
# Créer dans le répertoire d'origine, un fichier texte listant de manière aléatoire les morceaux disponibles
# --> Liste tout les morceaux mp3, ogg et wma avec leurs dossiers parents respectifs (ex: [Auteur]/[Album]/Morceau)
find -L ${rep_orig} -type f \( -iname "*.mp3" -o -iname "*.ogg" -o -iname "*.wma" \) | sort -R > ${rep_orig}/list_music && sed -i -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
#++#echo "Création de la liste des morceaux disponibles"
# Définir la taille disponible sur le répertoire de destination
taille_dispo=`df ${rep_dest} | awk '{print $4}' | head -2 | tail -1`
#++#echo "Taille disponible : ${taille_dispo}"
# Initialiser le compteur de morceaux à copier
nbr_copie=0
# Afficher une notification
notify-send -i music-player "Random Music Copy" "\nChoix des morceaux à copier"
# 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
#++#echo "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))
#++#echo "Sélection du morceau ${nbr_copie} : ${fic_music}"
#++#echo "Taille prise : ${taille_music} - Taille disponible : ${taille_dispo}"
done
# Afficher une notification
notify-send -i music-player "Random Music Copy" "\nLancement de la copie aléatoire"
#++#echo "Lancement de la copie aléatoire"
# Copier chaque morceau sélectionné
IFS=$'\n'
for morceau in $(cat ${rep_orig}/select_music); do
cd ${rep_orig} && cp --parents "${morceau}" "${rep_dest}" && cd
done
unset IFS
# Afficher une bulle de notification
notify-send -i music-player "Random Music Copy" "\nOpération terminée :\nCopie de ${nbr_copie} morceaux"
#++#echo "Copie de ${nbr_copie} morceaux - Place restante : ${taille_dispo}"
# Supprimer les fichiers texte temporaires
rm ${rep_orig}/list_music
rm ${rep_orig}/select_music
#++#echo "Suppression des fichiers temporaires"
# Si le répertoire d'origine ne contient pas de musique
else
# Afficher une notification
notify-send -i error "Random Music Copy" "\nMusithèque vide :\nAucun fichier mp3, ogg ou wma n'a été détecté."
#++#echo "Aucun fichier mp3, ogg ou wma n'a été détecté dans ${rep_orig}"
fi
# Si le répertoire de destination n'existe pas
elif [[ -d ${rep_orig} ]]; then
# Afficher une notification
notify-send -i error "Random Music Copy" "\nBaladeur non-monté :\n${rep_dest} introuvable."
#++#echo "${rep_dest} introuvable"
# Si le répertoire d'origine n'existe pas
elif [[ -d ${rep_dest} ]]; then
# Afficher une notification
notify-send -i error "Random Music Copy" "\nMusithèque absente :\n${rep_orig} introuvable."
#++#echo "${rep_orig} introuvable"
# Si aucun répertoire n'existe
else
# Afficher une notification
notify-send -i error "Random Music Copy" "\nRépertoires introuvables :\nVérifiez les variables."
#++#echo "${rep_orig} et ${rep_dest} introuvable"
fi
#++#sleep 300
exit 0
PS1 : Pour find, quel est l'avantage de -type f -iname "*.mp3" vis à vis de -name '*.mp3' ? Dans le doute, je l'ai utilisé, mais je n'ai pas perçu de résultat différents.
PS2 : Pour pouvoir conserver l'arborescence originel de la musithèque, j'ai dut faire un vilain hack à base de :
> ${rep_orig}/list_music && sed -i -e "s#${rep_orig}/##g" ${rep_orig}/list_music
cd ${rep_orig} && cp --parents "${morceau}" "${rep_dest}" && cd
Il aurait moyen de rendre cela plus propre ?
Dernière modification par lylambda (Le 08/03/2012, à 15:23)
Hors ligne
#29 Le 08/03/2012, à 15:38
- pingouinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Salut,
PS1 : Pour find, quel est l'avantage de -type f -iname "*.mp3" vis à vis de -name '*.mp3' ?
La première forme ne tient pas compte de la casse, et on récupère *.mp3 ou *.MP3
Hors ligne
#30 Le 08/03/2012, à 15:44
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Effectivement, l'intérêt est évident. Merci pingouinux !
Hors ligne
#31 Le 08/03/2012, à 16:19
- pingouinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Petite remarque sur le script du #28
# Shell : Supprimez #++# pour activer les sorties #
Il serait plus pratique de définir une varable dbg en tête de script, initialisée à False (ou même passée en argument), pour définir si on veut des sorties ou non. Chaque ligne commençant par #++# est réécrite ainsi :
#++#echo "Création de la liste des morceaux disponibles"
devient
if dbg : echo "Création de la liste des morceaux disponibles"
Pour avoir les sorties, il suffit juste d'initialiser dbg à True.
Correction : Ceci est codé en python. lylambda a correctement transposé le principe en bash en #34
Dernière modification par pingouinux (Le 09/03/2012, à 13:55)
Hors ligne
#32 Le 08/03/2012, à 16:47
- cracolinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
if dbg : echo "Création de la liste des morceaux disponibles"
Pour avoir les sorties, il suffit juste d'initialiser dbg à True.
C'est cool ça ! merci !
Hors ligne
#33 Le 08/03/2012, à 16:58
- cracolinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
find -L ${rep_orig} -type f \( -iname "*.mp3" -o -iname "*.ogg" -o -iname "*.wma" \) | sort -R > ${rep_orig}/list_music && sed -i -e "s#${rep_orig}/##g" ${rep_orig}/list_music
peut devenir :
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
enfin, je crois.
Hors ligne
#34 Le 09/03/2012, à 13:32
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
@ cracolinux : Ta commande find est plus propre, merci ! Je remplace.
@ pingouinux : En l'état, je n'ai pas réussi à intégrer if dbg : au script. Je n'ai pas trouvé non plus de documentation à ce sujet. Les exemples indiquent toujours l'usage de fi pour clore un if et je n'ai pas trouvé d'utilisation de ":" sous cette forme. Pourrais-tu me donner un exemple de ta méthode ?
Comme je lance le script du GUI et non du terminal, je n'ai pas repris l'idée de l'argument. Par contre, l'idée d'une variable debug me plait. J'ai fait avec mes moyens (if, fi et test de chaine de caractère) pour un résultat similaire à ce que tu proposes :
#!/bin/bash
######################################################
# Script de copie aléatoire de musique sur baladeur #
# Écrit par lylambda, inspiré par stefP #
# Version 6 #
# http://forum.ubuntu-fr.org/viewtopic.php?id=200739 #
######################################################
# Utiliser le mode debug en terminal ? Oui : dbg="Yes" - Non : dbg="No"
dbg="Yes"
# Définir le répertoire de destination
# /!\ À 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"
if [ ${dbg} == "Yes" ]; then
echo "(A) : Transfert musicale aléatoire de ${rep_orig} vers ${rep_dest}"
fi
# Si le répertoire de destination existe :
if [[ -d ${rep_dest} && -d ${rep_orig} ]]; then
# Afficher une notification
notify-send -i music-player "Random Music Copy" "\nSuppression des anciens morceaux"
if [ ${dbg} == "Yes" ]; then
echo "(B) : Suppression des anciens morceaux"
fi
# Vider le répertoire de destination
rm -r ${rep_dest}/*
# Créer dans le répertoire d'origine, un fichier texte listant de manière aléatoire les morceaux disponibles
# --> Liste tout les morceaux mp3, ogg et wma avec leurs dossiers parents respectifs (ex: [Auteur]/[Album]/Morceau)
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
if [ ${dbg} == "Yes" ]; then
echo "(C) : Création de la liste des morceaux disponibles"
fi
# Définir la taille disponible sur le répertoire de destination
taille_dispo=`df ${rep_dest} | awk '{print $4}' | head -2 | tail -1`
if [ ${dbg} == "Yes" ]; then
echo "(D) : Taille disponible : ${taille_dispo}"
fi
# Initialiser le compteur de morceaux à copier
nbr_copie=0
# Afficher une notification
notify-send -i music-player "Random Music Copy" "\nChoix des morceaux à copier"
# 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
if [ ${dbg} == "Yes" ]; then
echo "(E) : Création de la liste des morceaux sélectionnés"
fi
# 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))
if [ ${dbg} == "Yes" ]; then
echo " ${nbr_copie} : Sélection de ${fic_music}"
echo " Taille prise = ${taille_music} - Taille disponible = ${taille_dispo}"
fi
done
# Afficher une notification
notify-send -i music-player "Random Music Copy" "\nLancement de la copie aléatoire"
if [ ${dbg} == "Yes" ]; then
echo "(F) : Lancement de la copie aléatoire"
fi
# Copier chaque morceau sélectionné
IFS=$'\n'
for morceau in $(cat ${rep_orig}/select_music); do
cd ${rep_orig} && cp --parents "${morceau}" "${rep_dest}" && cd
done
unset IFS
# Afficher une bulle de notification
notify-send -i music-player "Random Music Copy" "\nOpération terminée :\nCopie de ${nbr_copie} morceaux"
if [ ${dbg} == "Yes" ]; then
echo "(G) : Copie de ${nbr_copie} morceaux - Place restante : ${taille_dispo}"
fi
# Supprimer les fichiers texte temporaires
rm ${rep_orig}/list_music
rm ${rep_orig}/select_music
if [ ${dbg} == "Yes" ]; then
echo "(H) : Suppression des fichiers temporaires"
fi
# Si le répertoire d'origine ne contient pas de musique
else
# Afficher une notification
notify-send -i error "Random Music Copy" "\nMusithèque vide :\nAucun fichier mp3, ogg ou wma n'a été détecté."
if [ ${dbg} == "Yes" ]; then
echo "Aucun fichier mp3, ogg ou wma n'a été détecté dans ${rep_orig}"
fi
fi
# Si le répertoire de destination n'existe pas
elif [[ -d ${rep_orig} ]]; then
# Afficher une notification
notify-send -i error "Random Music Copy" "\nBaladeur non-monté :\n${rep_dest} introuvable."
if [ ${dbg} == "Yes" ]; then
echo "(B) : ${rep_dest} introuvable"
fi
# Si le répertoire d'origine n'existe pas
elif [[ -d ${rep_dest} ]]; then
# Afficher une notification
notify-send -i error "Random Music Copy" "\nMusithèque absente :\n${rep_orig} introuvable."
if [ ${dbg} == "Yes" ]; then
echo "(B) : ${rep_orig} introuvable"
fi
# Si aucun répertoire n'existe
else
# Afficher une notification
notify-send -i error "Random Music Copy" "\nRépertoires introuvables :\nVérifiez les variables."
if [ ${dbg} == "Yes" ]; then
echo "(B) : ${rep_orig} et ${rep_dest} introuvable"
fi
fi
if [ ${dbg} == "Yes" ]; then
echo "Fin : vous pouvez quitter le terminal"
sleep 300
fi
exit 0
Et pour ceux qui veulent, voici le script tout simple sans debug ou commentaires :
#!/bin/bash
rep_dest="/media/MUSIC/MUSIC"
rep_orig="${HOME}/Musique"
if [[ -d ${rep_dest} && -d ${rep_orig} ]]; then
notify-send -i music-player "Random Music Copy" "\nSuppression des anciens morceaux"
rm -r ${rep_dest}/*
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
if test -s ${rep_orig}/list_music; then
taille_dispo=`df ${rep_dest} | awk '{print $4}' | head -2 | tail -1`
nbr_copie=0
notify-send -i music-player "Random Music Copy" "\nChoix des morceaux à copier"
while true; do
fic_music=`head -n $((${nbr_copie}+1)) ${rep_orig}/list_music | tail -1`
taille_music=`du -s "${rep_orig}/${fic_music}"| awk '{print $1}'`
if test "${taille_dispo}" -lt "${taille_music}"; then
head -n ${nbr_copie} ${rep_orig}/list_music | sort > ${rep_orig}/select_music
break
fi
taille_dispo=$((${taille_dispo}-${taille_music}))
nbr_copie=$((${nbr_copie}+1))
done
notify-send -i music-player "Random Music Copy" "\nLancement de la copie aléatoire"
IFS=$'\n'
for morceau in $(cat ${rep_orig}/select_music); do
cd ${rep_orig} && cp --parents "${morceau}" "${rep_dest}" && cd
done
unset IFS
notify-send -i music-player "Random Music Copy" "\nOpération terminée :\nCopie de ${nbr_copie} morceaux"
rm ${rep_orig}/list_music
rm ${rep_orig}/select_music
else
notify-send -i error "Random Music Copy" "\nMusithèque vide :\nAucun fichier mp3, ogg ou wma n'a été détecté."
fi
elif [[ -d ${rep_orig} ]]; then
notify-send -i error "Random Music Copy" "\nBaladeur non-monté :\n${rep_dest} introuvable."
elif [[ -d ${rep_dest} ]]; then
notify-send -i error "Random Music Copy" "\nMusithèque absente :\n${rep_orig} introuvable."
else
notify-send -i error "Random Music Copy" "\nRépertoires introuvables :\nVérifiez les variables."
fi
exit 0
Dernière modification par lylambda (Le 09/03/2012, à 16:43)
Hors ligne
#35 Le 09/03/2012, à 13:49
- pingouinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
@ pingouinux : En l'état, je n'ai pas réussi à intégrer if dbg : au script.
Au temps pour moi, ce que je proposais en #31 était codé en python, mais tu l'as bien transposé en bash. Tu peux éventuellement simplifier un peu, en remplaçant
dbg="Yes"
.......
if [ ${dbg} == "Yes" ]; then
echo "Aucun fichier mp3, ogg ou wma n'a été détecté dans ${rep_orig}"
fi
par
dbg=true
.......
[ $dbg ] && echo "Aucun fichier mp3, ogg ou wma n'a été détecté dans ${rep_orig}"
Dernière modification par pingouinux (Le 09/03/2012, à 13:59)
Hors ligne
#36 Le 09/03/2012, à 15:27
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Avec tout ces langages, on s'y perd ;-)
Ta simplification est bien mieux, merci. Je prends !
Hors ligne
#37 Le 09/03/2012, à 15:53
- cracolinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Oh ben merdeuu !
Moi qui me faisais une joie... j'ai plus qu'a apprendre le python (ça doit faire 152 fois que je dis ça...)
Hors ligne
#38 Le 09/03/2012, à 16:18
- Postmortem
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Salut,
dbg=true ....... [ $dbg ] && echo "Aucun fichier mp3, ogg ou wma n'a été détecté dans ${rep_orig}"
Je trouve que cette méthode prête à confusion car :
$ dbg=true
$ [ $dbg ] && echo "VRAI"
VRAI
$
$ dbg=false
$ [ $dbg ] && echo "VRAI"
VRAI
$
Personnellement, je ferais ainsi :
dbg=true
[[ $dbg != true ]] && dbg=false
........
$dbg && echo "Aucun fichier mp3, ogg ou wma n'a été détecté dans ${rep_orig}"
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#39 Le 09/03/2012, à 16:24
- pingouinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
@Postmortem #38 : Tu as raison. En plus je l'avais testé, mais sans mettre les [ ], ce qui est correct. Décidément, ce n'est pas mon jour...
Hors ligne
#40 Le 09/03/2012, à 16:37
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Je trouve que cette méthode prête à confusion
J'avais noté le même problème que j'avais résolu avec :
# Décommenter la ligne suivante pour utiliser le mode debug en terminal
dbg=yes
…
[ $dbg ] && echo "Aucun fichier mp3, ogg ou wma n'a été détecté dans ${rep_orig}"
Il y a une contre indication à ma méthode ?
Dernière modification par lylambda (Le 09/03/2012, à 16:38)
Hors ligne
#41 Le 09/03/2012, à 16:50
- cracolinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
ben ouais, je crois. Relis bien le post de Postmortem
Hors ligne
#42 Le 09/03/2012, à 16:52
- Postmortem
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Postmortem a écrit :Je trouve que cette méthode prête à confusion
J'avais noté le même problème que j'avais résolu avec :
# Décommenter la ligne suivante pour utiliser le mode debug en terminal dbg=yes … [ $dbg ] && echo "Aucun fichier mp3, ogg ou wma n'a été détecté dans ${rep_orig}"
Il y a une contre indication à ma méthode ?
Oui, car la syntaxe [ $dbg ] teste si la valeur de la variable dbg est vide ou non.
Tu peux donc mettre cette variable à yes, no ou n'importe quelle chaîne, le test sera vrai :
$ dbg=yes
$ [ $dbg ] && echo VRAI
VRAI
$
$ dbg=no
$ [ $dbg ] && echo VRAI
VRAI
Dernière modification par Postmortem (Le 09/03/2012, à 16:53)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#43 Le 09/03/2012, à 17:34
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Oui, j'avais bien compris. D'où ma solution de simplement commenter ou non la variable dbg selon si on veut le debug ou non, au lieu de passer dbg de true à false.
Cela évite [[ $dbg != true ]] && dbg=false mais il y a peut être quelques chose que je rate.
Hors ligne
#44 Le 09/03/2012, à 17:41
- cracolinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Ok! bien vu!
Hors ligne
#45 Le 09/03/2012, à 17:52
- Postmortem
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Oui, j'avais bien compris. D'où ma solution de simplement commenter ou non la variable dbg selon si on veut le debug ou non, au lieu de passer dbg de true à false.
Cela évite [[ $dbg != true ]] && dbg=false mais il y a peut être quelques chose que je rate.
Ah oui, j'eusse mal lu !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#46 Le 09/03/2012, à 18:06
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Et bien, si tout le monde est d'accord ^^ :
#!/bin/bash
######################################################
# Script de copie aléatoire de musique sur baladeur #
# Écrit par lylambda, inspiré par stefP #
# Version 7 #
# http://forum.ubuntu-fr.org/viewtopic.php?id=200739 #
######################################################
# Décommenter la ligne suivante pour utiliser le mode debug en terminal
##dbg=yes
###VARIABLES###
# Définir le répertoire de destination
# /!\ À modifier selon le baladeur
rep_dest="/media/BLUEs"
# Définir le répertoire d'origine
# /!\ À modifier selon l'emplacement de la bibliothèque musicale
rep_orig="${HOME}/Musique"
###############
[ $dbg ] && echo "(A) : Transfert musicale aléatoire de ${rep_orig} vers ${rep_dest}"
# Si le répertoire de destination existe :
if [[ -d ${rep_dest} && -d ${rep_orig} ]]; then
# Afficher une notification
notify-send -i music-player "Random Music Copy" "\nSuppression des anciens morceaux"
[ $dbg ] && echo "(B) : Suppression des anciens morceaux"
# Vider le répertoire de destination
rm -r ${rep_dest}/*
# Créer dans le répertoire d'origine, un fichier texte listant de manière aléatoire les morceaux disponibles
# --> Liste tout les morceaux mp3, ogg et wma avec leurs dossiers parents respectifs (ex: [Auteur]/[Album]/Morceau)
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 "(C) : Création de la liste des morceaux disponibles"
# 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 "(D) : Taille disponible : ${taille_dispo}"
# Initialiser le compteur de morceaux à copier
nbr_copie=0
# Afficher une notification
notify-send -i music-player "Random Music Copy" "\nChoix des morceaux à copier"
# 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
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}"
done
# Afficher une notification
notify-send -i music-player "Random Music Copy" "\nLancement de la copie aléatoire"
[ $dbg ] && echo "(F) : Lancement de la copie aléatoire"
# Copier chaque morceau sélectionné
IFS=$'\n'
for morceau in $(cat ${rep_orig}/select_music); do
cd ${rep_orig} && cp --parents "${morceau}" "${rep_dest}" && cd
done
unset IFS
# Afficher une bulle de notification
notify-send -i music-player "Random Music Copy" "\nOpération terminée :\nCopie de ${nbr_copie} morceaux"
[ $dbg ] && echo "(G) : Copie de ${nbr_copie} morceaux - Place restante : ${taille_dispo}"
# Supprimer les fichiers texte temporaires
rm ${rep_orig}/list_music
rm ${rep_orig}/select_music
[ $dbg ] && echo "(H) : Suppression des fichiers temporaires"
# Si le répertoire d'origine ne contient pas de musique
else
# Afficher une notification
notify-send -i error "Random Music Copy" "\nMusithèque vide :\nAucun fichier mp3, ogg ou wma n'a été détecté."
[ $dbg ] && echo "Aucun fichier mp3, ogg ou wma n'a été détecté dans ${rep_orig}"
fi
# Si le répertoire de destination n'existe pas
elif [[ -d ${rep_orig} ]]; then
# Afficher une notification
notify-send -i error "Random Music Copy" "\nBaladeur non-monté :\n${rep_dest} introuvable."
[ $dbg ] && echo "(B) : ${rep_dest} introuvable"
# Si le répertoire d'origine n'existe pas
elif [[ -d ${rep_dest} ]]; then
# Afficher une notification
notify-send -i error "Random Music Copy" "\nMusithèque absente :\n${rep_orig} introuvable."
[ $dbg ] && echo "(B) : ${rep_orig} introuvable"
# Si aucun répertoire n'existe
else
# Afficher une notification
notify-send -i error "Random Music Copy" "\nRépertoires introuvables :\nVérifiez les variables."
[ $dbg ] && echo "(B) : ${rep_orig} et ${rep_dest} introuvable"
fi
[ $dbg ] && echo "Fin : vous pouvez quitter le terminal" && sleep 300
exit 0
Entre nous, ce script vous est utile, ou vous m'avez apporté votre aide simplement pour l'améliorer ?
En tout cas, merci :-)
Hors ligne
#47 Le 09/03/2012, à 18:17
- cracolinux
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Les deux mon général !
Il est cool ton script, je compte m'en servir mais sans les notify-send (et sans les wma, faut pas pousser !)
Content d'avoir aidé un peu !
Hors ligne
#48 Le 09/03/2012, à 18:26
- Levi59
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Autre manière de tester si tu vérifie une valeur qui doit être 0 ou 1 (ou plutôt 0 ou différent de 0):
akira@virtualcrunchbang:~$ a=1
akira@virtualcrunchbang:~$ (($a)) && echo vrai || echo faux
vrai
akira@virtualcrunchbang:~$ a=0
akira@virtualcrunchbang:~$ (($a)) && echo vrai || echo faux
faux
akira@virtualcrunchbang:~$ a=159525
akira@virtualcrunchbang:~$ (($a)) && echo vrai || echo faux
vrai
Hors ligne
#49 Le 09/03/2012, à 18:36
- lylambda
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
@ cracolinux : Rassure toi, depuis la 1ère version du script, j'ai pu réencoder tout mes wma en ogg ;-)
Par contre je plaide coupable pour les mp3 !
@ Levi59 : J'avais hésité, mais je me suis dit qu'un test d'une chaine de caractère serait plus parlant que celui d'un valeur numérique.
Dernière modification par lylambda (Le 09/03/2012, à 18:38)
Hors ligne
#50 Le 09/03/2012, à 19:57
- Postmortem
Re : [Script/bash] Remplir aléatoirement votre baladeur MP3
Re-bonjour !
Tu peux aussi simplifier un peu les calculs avec les variables comme ceci :
(( taille_dispo = taille_dispo - taille_music ))
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne