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 17/04/2014, à 23:29

Five-ZonBerg

Générateur

Bonjour, alors en fait, j'aimerais développer un système de Fast Download automatique, mais il me manque certaines sources. Pour ce qui ne savent pas ce que c'est, pour faire simple, j'aimerais générer des lignes de commande tel que celle-ci: resource.AddFile( "dossier/dossier/fichier.ext" ). J'aimerais donc un script shell qui me permettrait, en le lançant, de répéter cette ligne de commande autant de fois qu'il y a de fichiers dans le dossier désigné, et que le chemin soit précisé avec son fichier entre les guillemets. Je sais déjà que je peux utiliser la commande find suivie du dossier, mais il manque resource.AddFile( " au début et " ) à la fin. Voici le comment j'ai raisonné en code:

echo "resource.AddFile"
echo '( "'
find garrysmod > liste.txt
echo '" )'

PS (Je souhaiterais que cela créé un fichier avec toutes les demandes à l'intérieur).

Je ne pense pas à avoir été très claire dans mes explications alors n'hésitez pas à me demander plus de précisions.

Cordialement,
Five-ZonBerg

Hors ligne

#2 Le 17/04/2014, à 23:49

casperfr

Re : Générateur

Bonsoir,

effectivement je n'ais pas bien compris ta demande,

mais je peux te proposé quelque chose via script pour généré ton fichier simplement,
si j'ai bien compris un truc du genre
tu indiques un dossier qui contient des fichiers et tu dois créé un fichier qui contient autant de ligne que de fichiers avec le nom du fichier a chaque ligne (je ne sais meme pas si je suis clair moi meme)
donc en fait un truc du genre :

#!/bin/bash
dossier="/home/dossier/"
fichier="/home/fichier"
sudo echo "" > $fichier

cd $dossier
for i in $(ls *)
 do
  sudo cat >> $fichier <<EOF
   resource.AddFile( "$i" )
  EOF
done

Dernière modification par casperfr (Le 17/04/2014, à 23:54)

Hors ligne

#3 Le 18/04/2014, à 01:24

Five-ZonBerg

Re : Générateur

Salut, ouais, c'est dur à expliquer x) mais je n'arrive pas à exécuter ton script même en le modifiant, pourrais tu me le faire sachant que je suis sous Debian 7.4, que mon répertoire se trouve dans /home/megapunch/fastdl/garrysmod/darkrp/garrysmod et que je veux que le fichier créé se nomme resources.lua dans /home/megapunch/fastdl/garrysmod/darkrp ?

Merci d'avance!

Hors ligne

#4 Le 18/04/2014, à 08:21

casperfr

Re : Générateur

Bonjour,

j'ai donc réessayé de mon coté avec un dossier qui existe sur ma machine pour vérifié qu'il n'y ai pas d'erreur dans le script que je te propose,
comme j'ai vu que cela fonctionnait je te le redonne avec les adresses que tu as besoin
nano script.sh

#!/bin/bash
dossier="/home/megapunch/fastdl/garrysmod/darkrp/garrysmod"
fichier="/home/megapunch/fastdl/garrysmod/darkrp/ressources.lua"
echo "" > $fichier

cd $dossier
for i in $(ls *)
do
sudo cat >> $fichier <<EOF
resource.AddFile( "$i" )
EOF
done

j'ai essayé avec l'interpréteur bash et sh et les deux fonctionne,
comme il y a création d'un fichier je ne sais pas si tu es propriétaire du dossier (tout du moins si tu as les droit d'écriture) pour la création du fichier ressources.lua je te conseil d'essayé le script avec un sudo

sudo bash script.sh

s'il s'avère que le script fonctionne pour que tu puisses automatisé les choses tu peux utilisé les variables dossier/fichier en temps qu'argument,

EDIT1 : echo "" > $fichier la commande toute simple permet de vider le fichier s'il existe ou de le créé s'il n'existe pas

EDIT2 : dans le script que je te propose il y a for i in $(ls *) l'étoile n'est pas indispensable pour faire un listage des fichiers (le cd $dossier avant cette commande est la pour empéché d'avoir le chemin complet des fichiers mais juste le nom de ceux ci) l'étoile est juste la pour pensé si on le souhaite à mettre des filtres pour lister qu'un certain type de fichiers.

EDIT3: pour écrire dans un fichier j'utise principalement <<EOF ...... EOF pour ne pas etre embété avec tous les caractère spécieux qui pourrait ce trouvé a l'interrieur du fichier, en plus de pouvoir tout ecrire correctement sur une ou plusieurs lignes de manière parfaitement lisible. attention quand meme les variables sont interprété, il faut donc faire attention quand on veux créé un fichier automatiquement avec des variables a l'interrieur pour avoir le nom de cette variable plutot que son résultat.
on écrit dans le fichier ce qui se trouve entre les EOF . avec <<EOF pour écrire a la suite du fichier et <EOF pour recommencé depuis le début en effaçant ce qui existe déja

Dernière modification par casperfr (Le 18/04/2014, à 08:42)

Hors ligne

#5 Le 18/04/2014, à 08:35

pingouinux

Re : Générateur

Bonjour,
Si les noms de fichiers contiennent des espaces, le script ci-dessus ne fonctionnera pas correctement. Je propose plutôt ceci, qui est une petite adaptation du script de casperfr #4 :

#!/bin/bash
dossier="/home/megapunch/fastdl/garrysmod/darkrp/garrysmod"
fichier="/home/megapunch/fastdl/garrysmod/darkrp/ressources.lua"

cd "$dossier"
for i in *
do 
   [ -f "$i" ] || continue               # Pour ne traiter que les fichiers
   printf 'resource.AddFile( "%s" )\n' "$i"
done >"$fichier"

Édité : Ajout des ""

Dernière modification par pingouinux (Le 18/04/2014, à 08:55)

Hors ligne

#6 Le 18/04/2014, à 10:03

casperfr

Re : Générateur

Bonjour pinguoinux et merci pour tes conseils,
tu as parfaitement raison pour les espaces,
il est vrai que pour l'usage que j'en ai (avec les EOF) je n'ai jamais de fichier avec espaces, mais quand c'est le cas je rajoute IFS=$'\n\t'
donc mon script deviens dans ce cas :

#!/bin/bash
dossier="/home/megapunch/fastdl/garrysmod/darkrp/garrysmod"
fichier="/home/megapunch/fastdl/garrysmod/darkrp/ressources.lua"
echo "" > $fichier
IFS=$'\n\t'
cd "$dossier"
for i in $(ls *)
do
sudo cat >> $fichier <<EOF
resource.AddFile( "$i" )
EOF
done

et dans ce cas il prend parfaitement en charge les espaces, mais peut etre qu'il y a d'autre inconveignant par rapport a la solution de pingouinux
en tout merci pour ton intervention.

Hors ligne

#7 Le 18/04/2014, à 10:03

Five-ZonBerg

Re : Générateur

Je ne sais pas si cela vient du fait que je sois sous Debian, mais voici l'érreur que cela m'affiche quand je lance le script:


resources.sh: ligne4: $'\r' : commande introuvable

Hors ligne

#8 Le 18/04/2014, à 10:08

casperfr

Re : Générateur

la ligne 4 (pour mon script) est juste la création du fichier ou sa remise a zero,
elle n'est pas indispensable donc tu peux la supprimer,
en plus j'ai déja rencontré des problèmes en utilisant sudo bash script.sh quand le fichier script.sh quand celui ci a des +x en droit d'execution a tous les utilisateurs
si c'est le cas il faut que tu execute ton script uniquement par l'execution :

sudo ./script.sh

EDIT : tu peux aussi la remplacer par un touch $fichier

Dernière modification par casperfr (Le 18/04/2014, à 10:15)

Hors ligne

#9 Le 18/04/2014, à 10:15

Five-ZonBerg

Re : Générateur

Maintenant, l'érreur est:

-bash: ./addfile.sh : /bin/bash^M : mauvais interpréteur: Aucun fichier ou dossier de ce type

Hors ligne

#10 Le 18/04/2014, à 10:22

casperfr

Re : Générateur

j'avais essayé avec sh au cas ou ce soit ton interpréteur par défaut
dans l'entete du fichier change
#!/bin/bash par #!/bin/sh
pour executer : sudo ./script.sh
ou pour le lancer : sudo sh script.sh
tu peux connaitre ton interpréteur en faisant : echo $BASH

peut etre que tu dois créé le fichier en rajoutant la ligne dans le fichier script.sh
touch $fichier

Hors ligne

#11 Le 18/04/2014, à 10:29

pingouinux

Re : Générateur

Five-ZonBerg #9 a écrit :

-bash: ./addfile.sh : /bin/bash^M : mauvais interpréteur: Aucun fichier ou dossier de ce type

C'est parce que le 1ère ligne de ton fichier (et sans doute les autres aussi) se termine par '\r\n' au lieu de '\n'. Cela vient probablement de ton éditeur de texte, à moins que tu n'aies généré le fichier sous Windows.

Hors ligne

#12 Le 18/04/2014, à 13:08

Five-ZonBerg

Re : Générateur

Toujours le même problème, pouvez-vous me me donner quelque chose de compatible avec Debian?

Hors ligne

#13 Le 18/04/2014, à 13:24

casperfr

Re : Générateur

tout ce qui t'a été proposé précédement fonctionne parfaitement sous Debian,
le problème que tu rencontre comme te la suggéré pingouinux dois venir de la manière dont tu écris ton script, via l'éditeur,
il faudrait que tu écrive ton script en console via nano par exemple ou un éditeur en mode terminal pour évité les retour chariot qui ne serait pas pris en charge par l'interpréteur de commande bash

Hors ligne

#14 Le 18/04/2014, à 13:45

Five-ZonBerg

Re : Générateur

J'ai vraiment tout essayé, je vous invite à vous connecter via TeamViewer, voici mon id: [modéré] et voici mon mot de passe: [modéré]

[modération : bonjour. Il est risqué de donner ses identifiants et mot de passe publiquement. Invite plutôt les personnes intéressées à te contacter par courriel pour les avoir]

Dernière modification par xabilon (Le 18/04/2014, à 14:40)

Hors ligne