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