#1 Le 02/06/2007, à 14:22
- nanolight
[Script résolu] fichier aléatoire
***************************************************************
Vous souhaitez utiliser un fichier aléatoirement pioché dans un répertoire?
Voici la résolution:
Créez un nouveau fichier texte ou vous collez ce script:
#!/bin/bash
DIR= chemin du répertoire ou se trouve les fichiers à piocher
line=0
let " line = ($RANDOM % `ls $DIR/*.jpg | wc -l`) + 1 "
ls $DIR/*.jpg | nl | while read a b
do
{
[ "$a" = "$line" ] && cp "$b" chemin du répertoire ou vous voulez copier le fichier/fichier.jpg && break;
}
done
exit 0
L'exemple est donné ici pour une image jpeg, changez l'extension .jpg selon vos besoins
Enregistrer le fichier script.shet ouvrez un terminal et saisissez:
cd répertoire ou vous avez enregistré votre script
bash script.sh
N'utilisez pas la commande sh, cela pose certains problèmes (voir suite du topic)
*********************** TOPIC INITIAL***********************
Bonjour à tous, je cherche à mettre une image différente chaque jour en avatar dans gaim qui serait piochée dans un dossier
J'ai trouvé ce script developpez.net
et j'ai voulu le modifier pour moi:
#!/bin/bash
line=$(($RANDOM%`ls /home/nanolight/photoalea/*.jpg | wc -l`))
line=$((line + 1))
ls /home/nanolight/photoalea/*.jpg | nl | while read a b
do
[ "$a" = "$line" ] && {cp /home/nanolight/photoalea/"$b".jpg /home/nanolight/photomsn/avatar1.jpg; break; }
done
exit 0
en le lancant dans un terminal il semblerait que il ne comprenne pas le modulo (%)de la ligne 3:
photo_msn_aleatoire: 3: arithmetic expression: syntax error: "%15"
le 15 correspondant à mes 15 photos dans photoalea
Une idée?
Merci
Dernière modification par nanolight (Le 08/06/2007, à 14:00)
Hors ligne
#3 Le 02/06/2007, à 18:30
- tarte en pion
Re : [Script résolu] fichier aléatoire
Moi ça m'intéresse aussi pour m'en servir pour faire un compil aléatoire de fichiers audio.
Où est le bug ?
Hors ligne
#4 Le 02/06/2007, à 18:31
- tarte en pion
Re : [Script résolu] fichier aléatoire
La catégorie développement serait d'ailleurs plus adaptée !
Hors ligne
#5 Le 02/06/2007, à 18:44
- Yannick_LM
Re : [Script résolu] fichier aléatoire
Je comprends pas comment le script du gars en question peut fonctionner
En tout cas,voilà une version qui marche chez moi :
#!/bin/bash
DIR=/home/nanolight/photoalea/
line=0
let " line = ($RANDOM % `ls $DIR/*.jpg | wc -l`) + 1 "
ls $DIR/*.jpg | nl | while read a b
do
{
[ "$a" = "$line" ] && cp "$b".jpg \n
/home/nanolight/photomsn/avatar1.jpg && break;
}
done
exit 0
Bon évidemment, je l'ai pas testé avec les mêmes constantes ...
(pas le même dossier, pas la même action effectuée)
Trucs et astuces pour Vim
Ma web page avec des trucs dessus ...
Hors ligne
#6 Le 02/06/2007, à 18:58
- tarte en pion
Re : [Script résolu] fichier aléatoire
Moi il me fait
copie.sh: 4: let: not found
Ca vient d'où ? C'est bizarre...
Hors ligne
#7 Le 02/06/2007, à 22:33
- nanolight
Re : [Script résolu] fichier aléatoire
Merci pour vos réponses...
@ tarte en pion, j'ai hésité entre trucs et astuces et developpement...:)
@Yannick_LM, j'ai essayé ton script "tel quel" et ca marche pas, pareil il me dit qu'il connait pas let ni avatar1.jpg
Quand tu dis que t'as pas testé avec les memes constantes, ca veut dire quoi? Qu'est-ce qui change pour mon cas?
Hors ligne
#8 Le 02/06/2007, à 23:03
- abetsic
Re : [Script résolu] fichier aléatoire
Bonjour,
j'ai trouvé une autre façon si ça intéresse :
#!/bin/bash
nb_files=`ls -1 | wc -l`
alea=$(($RANDOM % $(($nb_files+1))))
tmp=$(($alea-1))
tmp2=$(($alea+1))
#echo $nb_files $alea $tmp $tmp2
file=`ls -1 | sed 1,${tmp}d | sed $tmp2,${nb_files}d`
ls -1 | sed $tmp2,${nb_files}d | sed 1,${tmp}d
D'abord on compte le nombre de fichiers du repertoire courant (nb_files), puis on positionne un certain nombre de variables dont alea.
Puis on récupère la ligne "alea" de la liste de fichier du repertoire courant grace à deux commandes sed (on peut surement n'en faire qu'une seule...)
Voilà.
Hors ligne
#9 Le 03/06/2007, à 07:33
- tarte en pion
Re : [Script résolu] fichier aléatoire
Euh... cette méthode me donne
alea.sh: 4: arithmetic expression: syntax error: " % (23+1)"
Est-ce que quelque chose devrait être installé qui ne l'est pas ?
Hors ligne
#11 Le 03/06/2007, à 15:59
- abetsic
Re : [Script résolu] fichier aléatoire
Bizarre, chez moi ça marche sans problèmes, tu as bien mis le calcul dans $(()) ?
Par ailleurs il y a des effets sur les bords lorsque alea vaut 1 par exemple aucun fichier n'est renvoyé. Il doit falloir faire un "if-then-else" lors des cas extremes.
Hors ligne
#12 Le 03/06/2007, à 17:19
- nanolight
Re : [Script résolu] fichier aléatoire
abetsic, tu voudrais bien poster le script en entier que tu as avec la commande "cp" parce que je ne m'y connais pas du tout et j'ai du mal à faire un mix des deux?
Je n'ai pas pu essayer le script de abetsic mais j'en suis toujours avec mon probleme de modulo qu'il reconnait pas alors que si je le fais dans un terminal comme krusaf dans le post #2, ben ca marche bien, mais quand c'est dans un script, il le reconnait plus... pareil pour "let"
Hors ligne
#13 Le 03/06/2007, à 18:13
- abetsic
Re : [Script résolu] fichier aléatoire
#!/bin/bash
DIR="/home/nanolight/photoalea/*.jpg"
nb_files=`ls -1 ${DIR} | wc -l`
alea=$(($RANDOM % $(($nb_files)) + 1))
if [ $alea -eq 1 ]; then
file=`ls -1 ${DIR} | head -n 1`
else
if [ $alea -eq $nb_files ]; then
file=`ls -1 ${DIR} | tail -n 1`
else
file=`ls -1 ${DIR} | sed $(($alea+1)),${nb_files}d | sed 1,$(($alea-1))d`
fi
fi
cp $file /home/nanolight/photomsn/avatar1.jpg
devrait marcher, mais après relecture de ton code, ta solution est un peu plus élégante. A toi de voir
Hors ligne
#14 Le 03/06/2007, à 19:54
- nanolight
Re : [Script résolu] fichier aléatoire
bizarre, toujours le meme probleme:
essaibash: 5: arithmetic expression: syntax error: " % (15) + 1"
Le modulo marche bien chez toi?
Quel serait la différence de configuration du systeme qui ferait ca?
Pour info, je suis sous Feisty mais après je sais pas quoi dire d'autre
Hors ligne
#15 Le 04/06/2007, à 11:35
- tarte en pion
Re : [Script résolu] fichier aléatoire
Pareil chez moi. et je suis aussi sous Feisty
Hors ligne
#16 Le 04/06/2007, à 17:25
- abetsic
Re : [Script résolu] fichier aléatoire
Bizarre, le code que j'ai donné plus haut marche chez moi sans aucun problème...
Essaye de modifier le script pour décomposer au maximum les calculs ligne par ligne en affichant après chaque calcul le résultat voire où ça coince réellement.
Hors ligne
#17 Le 04/06/2007, à 19:07
- tarte en pion
Re : [Script résolu] fichier aléatoire
Il l'indique bien : c'est "let" qui coince dans tous les cas... J'ai revérifié..
Hors ligne
#18 Le 05/06/2007, à 23:42
- Yannick_LM
Re : [Script résolu] fichier aléatoire
Y a un truc qui m'est passé par l'esprit...
Je pense que le problème avec (function not found) est lié.
J'ai posté une réponse sur l'autre topic, (ici ) mais je ne suis pas sûr que tu suives les deux...
Trucs et astuces pour Vim
Ma web page avec des trucs dessus ...
Hors ligne
#19 Le 06/06/2007, à 18:21
- tarte en pion
Re : [Script résolu] fichier aléatoire
Y a un truc qui m'est passé par l'esprit...
Je pense que le problème avec (function not found) est lié.
J'ai posté une réponse sur l'autre topic, (ici ) mais je ne suis pas sûr que tu suives les deux...
Si si je suis les deux!
Hors ligne
#20 Le 06/06/2007, à 18:47
- Balkoth
Re : [Script résolu] fichier aléatoire
Moi il me fait
copie.sh: 4: let: not found
Ca vient d'où ? C'est bizarre...
C'est sans doute parce que tu lances le script avec sh copie.sh, avec le shell dash par défaut...
Ça devrait marcher si tu fais bash copie.sh, ou encore ./copie.sh en lui ayant donné les droits en exécution.
Hors ligne
#21 Le 07/06/2007, à 13:38
- tarte en pion
Re : [Script résolu] fichier aléatoire
Nickel, c'était ça le problème. Merci!
Mais je voulais utiliser ce script pour copier de manière aléatoire des fichiers sur mon baladeur mp3... Le problème est que mes fichiers sont dans des dossiers!
J'ai donc adapté comme ça le script:
#!/bin/bash
DIR=/home/tep/.Scripts/mp3dir
line=0let " line = ($RANDOM % `ls -R $DIR | wc -l`) + 1 "
ls -R $DIR | nl | while read a b
do
{
[ "$a" = "$line" ] && cp "$DIR"/"$b" /home/tep/"$a" && echo "$b" && break;
}
doneexit 0
Le problème c'est que là "$DIR"/"$b" ne donne pas le nom du sous-dossier dans lequel est le fichier, et la commande ls -R n'est pas très propre vu qu'il y a le nom des sous-dossiers en "titres de paragraphes"!
Comment faire? Je voudrai ls -R avec le nom complet des adresses mais j'ai pas trouvé dans le man!
Dernière modification par tarte en pion (Le 07/06/2007, à 13:53)
Hors ligne
#22 Le 07/06/2007, à 13:55
- Balkoth
Re : [Script résolu] fichier aléatoire
Tu peux utiliser la commande find à la place de ls -R.
Par exemple : find . -type f liste tous les fichiers du répertoire courant, récursivement.
Je n'ai pas testé avec le script, mais ça devrait marcher.
Hors ligne
#23 Le 07/06/2007, à 14:12
- nanolight
Re : [Script résolu] fichier aléatoire
C'est sans doute parce que tu lances le script avec sh copie.sh, avec le shell dash par défaut...
Ça devrait marcher si tu fais bash copie.sh, ou encore ./copie.sh en lui ayant donné les droits en exécution.
Merci Balkoth, ca marche aussi pour moi !!
Bon par contre il se trouve que gaim ne voit pas que la photo a changé donc je vais chercher comment il peut recharger l'avatar automatiquement...
Merci à tous de votre aide!
Hors ligne
#24 Le 07/06/2007, à 18:50
- tarte en pion
Re : [Script résolu] fichier aléatoire
Exact c'est parfait! Merci beaucoup!
Hors ligne
#25 Le 07/06/2007, à 18:51
- tarte en pion
Re : [Script résolu] fichier aléatoire
D'ailleurs puisque nous sommes dans le forum Trucs et astuces, ça serait sympa de faire un résumé dansle premier post avec le script complet qui fonctionne!
Hors ligne