Aller au contenu

[script] T


ppic

Messages recommandés

voila, je me suis encore amusé ce week end.

je télécharge pas mal de gros fichier et j'avou que les lancer un par un de puis le pc en wifi, c'est long et lent.

je me suis donc amusé a faire un tit script sh qui s'alimente d'une liste et gère tout seul les téléchargements des fichiers et qui tourne sur mon nas directement relié a la box.

il s'alimente donc d'un fichier liste_fichiers.txt type:

X_MEN.Wolverine.trailer.720p.mkv.00-t-.xtm

http://dl.free.fr/gggthytjyj

http://dl.free.fr/htrhjtyjtyl

WANTED.trailer.720p.mkv.00-t-.rar

http://dl.free.fr/gfghytjgf

http://dl.free.fr/hdhyjkjh

http://dl.free.fr/hdhyhgdhl
notez le -t- qui servira pour les fichiers multipart il est important de mettre les fichier dans l'ordre les fichiers s'enregistreront comme ça: X_MEN.Wolverine.trailer.720p.mkv.001.xtm X_MEN.Wolverine.trailer.720p.mkv.002.xtm WANTED.trailer.720p.mkv.001.rar WANTED.trailer.720p.mkv.002.rar WANTED.trailer.720p.mkv.003.rar voici le script en question:
#!/bin/sh

#

#by ppic


dllimit=3

attendre=60


a=1

tampon=0

echo "script en cours..."

echo "$(date +%H:%M:%S) lancement du script..." > httpdl.log

while read line; do 

	a=$(($a + 1))

	test=$(echo ${line%:*})

	if [ "$test" != "http" ]

		then titre="$test"

		num=1

	else

		ligne=`expr "$line" : "\(.*\).$"`

		file=$(echo $titre | sed -e "s/-t-/$num/g")

		file=`expr "$file" : "\(.*\).$"`

		echo "$(date +%H:%M:%S) lancement paquet $file ( $ligne)..." >> httpdl.log

		echo "$(date +%H:%M:%S) lancement paquet $file ..."

		wget $(echo ${line% *}) -O "$file" -a httpdl.log -nv &

		num=$(($num + 1))

		sleep 3

		tampon=$(ps -u | grep "wget" | wc -l)

		tampon=$(($tampon - 1))

		while [ $tampon -ge $dllimit ]; do

			echo fichiers en cours: $tampon

			sleep $attendre

			tampon=$(ps -u | grep "wget" | wc -l)

			tampon=$(($tampon - 1))

			done


	fi	

	done<"liste_fichiers.txt"

	echo fichiers en cours: $tampon

	wait

	echo "...fin du script"

	echo "$(date +%H:%M:%S) ...fin du script" >> httpdl.log

ces deux fichiers sont donc a placer dans le mm repertoire, lancez le script les fichiers seront dl dans le répertoire.

dllimit permet de fixer le nombre de téléchargement simultané max.

ça tourne impec sur mon syno ds207+

petite mise a jour:

attendre permet de fixer en seconde les delais entre les vérification de dl en cours.

le script boucle pour vérifier le nombre de wget lancé par l'utilisateur qui lance le script, ce qui me permet de relancer un dl sans attendre que tous les précédents soient terminés :D

Lien vers le commentaire
Partager sur d’autres sites

ben de rien ,j'ai remarqué que certains dl genre les dl free ne passent pas par le download station et passent nickel en wget, donc voila le résultat.

si t'as des idées, hésite, pas , je suis encore pret a retravailler dessus ;)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

super idée ce script, pour le multithread c'est bien utile.

moi mon NAS c'est un home made pc avec une gentoo qui fait serveur samba+ftp+apache

je precise parceque j'ai eu des effets de bords en testant le script.

rien de méchant:

wget $(echo ${line% *}) -O $file -a httpdl.log -nv
ça me créait un fichier d'archive -a qui était la cible de tout les wget donc j'ai viré -O $file, sauf on change le nom du fichier sortant il sera de toute façon créé avec le nom du lien. et j'ai transformé -a httpdl.lo en --append-output=httpdl.log oui c'est la même chose mais cette fois il me crée bien le fichier et pas une archive -a ! j'ai ajouté --directory-prefix= pour specifier le répertoire cible des fichiers créés, j'ai mis le chemin absolu du fichier liste source et le script dans /usr/bin histoire de ne pas me soucier du repertoire dans lequel je suis. ya un truc qui serais nickel AMHA c'est de lancer un 'screen -d -m -S' par wget ça permettrait de voir ou en sont les DL, parceque sur tout les tests que j'ai fais, il ya eu 2 fois ou les DL se sont terminés et ou le script ne s'est pas terminé ex:
19:31:31 lancement paquet  ( http://monfichier...

 fichiers en cours: 4

par contre dans le log c'est nickel.

bon boulot en tout cas :)

Lien vers le commentaire
Partager sur d’autres sites

tient, étonnant, j'ai déja eu quelques effets de bord, mais rien de tel.

le renommage, je l'utilise car pour exemple les dl free, les fichiers porteront comme nom l'identifiant du dl et pas pas le nom du fichier comme si on le dl depuis un navigateur (j'ai pas compris pourquoi d'ailleur)

et j'ai transformé -a httpdl.lo en --append-output=httpdl.log

oui c'est la même chose mais cette fois il me crée bien le fichier et pas une archive -a !

super étonnant oui

tu as pu reperer les noms de fichiers ou adresse qui t'ont causés ces effets?

moi comme erreur rencontré, il fait parfois un dl au dessus de la limite et une fois un fichier que j'ai jamais réussi a identifier !

la plupart du temps tout se passe bien, je pense que le renommage pose le plus de pb avec les caractere accentués, mais sinon, plutot fonctionnel.

je ne vois pas du tout de quoi tu parle pour l'affichage des dl en cours, mais cela m'interesse grandement !

si t'as des infos, je suis preneurs!

edit: je relis la fin de ton message, une petite question me viens a l'esprit, tu avais bien dans le log la fin du script?

edit 2 : je viens de mettre screen sur mon syno (via ipkg) je sens que je vais m'amuser avec ça :P

Lien vers le commentaire
Partager sur d’autres sites

pour les fois ou le script ne s'est pas terminé correctement, il n'y avait pas la sortie dans le log non plus.

c'est juste dans mon terminal il me disait que ça tournait, je voyais le port du switch du NAS qui etait fixe...

bizarre je lance un ps 'aux' | grep wget et rien...j'ai verifié la taille des fichiers c'etait ok, j'ai laissé un peu de temps à la machine environ 15 minutes, toujours pareil.

j'ai juste quitté le script et voila, ça me l'a refait hier aussi, je ne sais pas à quoi ça tiens.

mais bon c'est minime comme pb.

donc oui lancer un :

screen -d -m -S DL1 wget $(echo ${line% *})

ça permet dans un autre terminal de avec un screen -x DL1 de voir ou en est le DL en question.

puis ensuite faut incrementer chaque DL.

on pourrait récuperer le nom du fichier en question mais ffff la flemme de taper toute l'URL pour voir l'avancement :)

Lien vers le commentaire
Partager sur d’autres sites

hum!

j'ai lancé 12 fichiers cette nuit, pas de soucis de mon coté.

bizarre ton histoire, il faut savoir qu'a partir du moment ou il a fini de lire le fichier, il donne une derniere fois le nombre de dl en cours (en général limite-1) et plus rien n'apparait j'usque la fin du script, il ne boucle plus pour vérifier les dl en cours, ça , c'est normal.

le screen permettrai aussi de ne pas se retrouver planté par une fermeture de terminal.

par contre, je n'arrive pas avec screen a affichier plusieurs fenetre dans la meme (séparation d'affichage)

donc oui lancer un :

screen -d -m -S DL1 wget $(echo ${line% *})

c'est sensé me faire quoi ? car je teste avec un ls au lieu du wget, et rien ne se passe.

Lien vers le commentaire
Partager sur d’autres sites

ça permet de détacher le process du TTY et de le récupérer apres

genre :

screen -d -m -S TIPTOP top
screen -x TIPTOP

on recupère la sortie du top, donc dans l'exemple je mets DL1 mais le but ça serait d'avoir un DL* par wget qui se lance.

en incrémentant et en utilisant un nom pas trop chiant à taper.

sinon j'ai DL une 30aines de fichiers ce matin RAS.

je sais pas à quoi ça tient.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.