Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#51 Le 10/03/2012, à 15: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, à 16: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 !


Trusty Tahr (64 bits)

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#53 Le 10/03/2012, à 16:25

pingouinux

Re : [Script/bash] Remplir aléatoirement votre baladeur MP3

Si on est fainéant, ceci marche aussi :

(( taille_dispo -= taille_music ))

En ligne

#54 Le 10/03/2012, à 16:41

Postmortem

Re : [Script/bash] Remplir aléatoirement votre baladeur MP3

pingouinux a écrit :

Si on est fainéant, ceci marche aussi :

(( taille_dispo -= taille_music ))

Ah ben oui, tant qu'à être fainéant !


Trusty Tahr (64 bits)

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#55 Le 05/03/2013, à 18: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, à 12: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 smile

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, à 12:54

stefP

Re : [Script/bash] Remplir aléatoirement votre baladeur MP3

Génial, 5 ans après, d'autres prennent le relais smile
Je le note pour tester cette nouvelle version

Hors ligne

#58 Le 07/03/2013, à 22: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, à 11:57

lylambda

Re : [Script/bash] Remplir aléatoirement votre baladeur MP3

Si ce n'est que ça, c'est effectivement vite corrigeable smile

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, à 21: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, à 21:28)

Hors ligne

#61 Le 07/01/2014, à 00:23

lylambda

Re : [Script/bash] Remplir aléatoirement votre baladeur MP3

Merci pour cette correction de coquille smile
Il y a une solution, pour les bugs que tu as mentionnés ?

Hors ligne

#62 Le 07/01/2014, à 15: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, à 16: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, à 16:04)

Hors ligne

#64 Le 07/01/2014, à 16:06

Postmortem

Re : [Script/bash] Remplir aléatoirement votre baladeur MP3

lylambda a écrit :

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.


Trusty Tahr (64 bits)

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#65 Le 08/01/2014, à 17: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, à 13: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, à 13: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, à 13:38)

Hors ligne

#68 Le 14/01/2017, à 14: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