Contenu | Rechercher | Menus

Annonce

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.

À propos de l'équipe du forum.

#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

#2 Le 02/06/2007, à 17:27

krusaf

Re : [Script résolu] fichier aléatoire

krusaf@hades:~$ echo "5 % 4 " | bc
1

smile

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 ! yikes sad

roll

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 hmm
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

#10 Le 03/06/2007, à 12:36

krusaf

Re : [Script résolu] fichier aléatoire

je me demande pourquoi j'ai répondu tiens ...

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... hmm 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 wink

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... sad J'ai revérifié.. hmm

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

Yannick_LM a écrit :

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

tarte en pion a écrit :

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! big_smile

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=0

let " 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;
    }
done

exit 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

Balkoth a écrit :

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 !! big_smile

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! cool

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! wink

Hors ligne