Bonsoir à tous,
j'ai développé ce script pour mon propre besoin, mais si celà peut interesser des gens c'est encore mieux 🙂
Mon besoin était le suivant :
Remplir mon lecteur MP3 à partir de fichiers *.mp3 aléatoirement choisis sur mon PC
Utilisation du script:
Il se décompose en 4 parties
* Selectionner le répertoire qui acceuillera les mp3 (donc votre lecteur mp3 ou mémoire SD)
* Selectionner le répertoire qui contient tous vos mp3 (typiquement /media/MP3 chez moi)
* Selectionner le nombre de MP3 que vous voulez ainsi copier
* Récapitulatif avec barre de progression et possibilité d'annuler
Le script :
Il a été réalisé en shell avec zenity, donc très facile à personnaliser si besoin, il effectue les actions suivantes
* Recherche à partir du répertoire source de tous les fichiers avec extension ".mp3"
* Constitution du fichier plat "listmp3" à partir des résultats de la recherche précédente
* Génération d'un nombre aléatoire entre 1 et le nombre de ligne dans "listmp3"
* Le fichier mp3 étant positionné à la ligne dont le numéro a été choisi au hasard est copié dans le lecteur mp3
Il est possible d'ajouter d'autres formats que le mp3 (que celui qui a dit wma se dénonce! :lol:), il faut ajouter la ligne
find $rep_orig -name *.EXTENSION >> listmp3 en dessous de
find $rep_orig -name *.mp3 > listmp3 et ceci pour autant d'extensions que voulus! (non testé de mon côté mais ya pas de raisons que ça marche pas)
Remarque :
* Le nombre aléatoire est généré avec perl, vérifier que la commande
perl est accessible sur votre poste (il me semble que c'est en natif sur GG)
* Sur l'écran du récapitulatif je n'arrive pas à afficher le nom complet des lecteurs si ils ont des espaces (bug zenity?), mais pas de panique, ca copie bien là ou il faut 🙂
* Ne pas supprimer, renommer, ou modifier le fichier "listmp3" durant la copie. Ce fichier est supprimé en cas d'annulation ou fin de la copie.
* Pour les curieux qui se demandent, le cas ou je décrémente le nombre de fichiers copiés est pour le cas ou le fichier aléatoirement choisi pour être copié existe déjà sur le lecteur destination.
Source :
#!/bin/bash
rep_dest=$(zenity --title="Choisir le répertoire de destination des MP3" --file-selection --directory)
if [[ $rep_dest"x" = "x" ]]
then
exit 1
fi
rep_orig=$(zenity --title="Choisir le répertoire source des MP3" --file-selection --directory)
if [[ $rep_orig"x" = "x" ]]
then
exit 1
fi
nbre_fic=$(zenity --title "Nombre de MP3 à copier" --entry --text "Saisir le nombre de MP3 à copier.")
if [[ $nbre_fic"x" = "x" ]]
then
exit 1
fi
find $rep_orig -name *.mp3 > listmp3
nbre_total_mp3=`wc -l listmp3 | cut -d" " -f1`
fic_copies=0
(
while test $fic_copies -lt $nbre_fic
do
rand=`perl -e '@c=(1..'$nbre_total_mp3');print join("",@c[map{rand @c}(1)]),'`
fic_orig=`head -$rand listmp3 | tail -1`
cp "$fic_orig" "$rep_dest"
if test $? -eq 1
then
fic_copies=$(($fic_copies-1))
fi
fic_copies=$(($fic_copies+1))
clear
expr `expr $fic_copies \* 100` / $nbre_fic
done
echo 100
) |
zenity --progress --auto-kill \
--title="Copie des MP3" \
--text="Copie de "$nbre_fic" fichier(s)...
de "$rep_orig"
vers "$rep_dest" " \
--percentage=0
rm listmp3