URL: https://linuxfr.org/forums/astucesdivers/posts/un-gestionnaire-de-t%C3%A9l%C3%A9chargement-en-shell Title: Un gestionnaire de téléchargement en shell Authors: BB Date: 2010年11月21日T19:15:33+01:00 Tags: Score: 4 L’idée est de pouvoir lancer un téléchargement en tâche de fond qui enregistre le fichier dans ~/data. On peut récupérer l’avancement des téléchargements en mode texte dans le fichier ~/.dm/log pour affichage dans Conky typiquement. L’utilisation est très simple : dm 'url'. Un exemple : % dm '[http://ftp.halifax.rwth-aachen.de/blender/movies/sintel-2048(...)](http://ftp.halifax.rwth-aachen.de/blender/movies/sintel-2048-stereo.ogv') # attendre un peu plus de 10 secondes % cat ~/.dm/log 56% 10m48s sintel-2048-stereo.ogv ftp.halifax.rwth-aachen.de % dm '[http://mirror.bigbuckbunny.de/peach/bigbuckbunny_movies/big_(...)](http://mirror.bigbuckbunny.de/peach/bigbuckbunny_movies/big_buck_bunny_480p_h264.mov') # attendre au moins 10 secondes % cat ~/.dm/log £spaces£ £/spaces1ドル% 14m38s big_buck_bunny_480p_h264.mov mirrorblender.top-ix.org 83% 4m10s sintel-2048-stereo.ogv ftp.halifax.rwth-aachen.de Pour que conky l’utilise il suffit d’ajouter « ${tail /home/nicolas/.dm/log 20 10} », par exemple, dans la section TEXT. En interne il y aura de multiples « clients » qui vont lancer wget et envoyer la sortie dans le fichier qui va bien. Un « serveur » (lancé et arrêté automatiquement) va se contenter de lire les fichiers des clients, et mettre en forme l’avancement dans le log. #!/bin/sh # Un gestionnaire de téléchargement # Répertoire d’enregistrement des téléchargements data=$HOME/data # Répertoire du gestionnaire dir=$HOME/.dm # Des serveurs filtrent avec le user-agent useragent='Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.15) Gecko/20101028 Conkeror/0.9.2 (Debian-0.9.2+git100804-1)' if [ ! -d $dir ] then mkdir $dir fi if [ ! -d $data ] then mkdir $data fi lock=$dir/lock if [ "1ドル" = "server" ] then trap "rm -f $lock; exit" INT TERM EXIT touch $lock log=$dir/log run=1 while [ $run -eq 1 ] do sleep 10 echo -n ''>$log for tmp in $dir/*.tmp do if [ "$tmp" = "$dir/*.tmp" ] then run=0 else run=1 echo -n \ "$(tail -n2 "$tmp"|head -n1|awk '{printf ("%3s %6s ", 7,ドル 9ドル)}')" \ >>$log echo "$(basename "$tmp" .tmp)">>$log fi done echo ' '>>$log done rm $lock trap - INT TERM EXIT else if [ "1ドル" = "client" ] then file=$(echo "2ドル"|awk --field-separator / '{print $NF" "3ドル}') log="$dir/$file.tmp" wget --user-agent "$useragent" --continue -P$data "2ドル" 2>$log & wait $! sleep 15 rm "$log" else if [ ! -e $lock ] then 0ドル server & fi 0ドル client "1ドル" & fi fi Bien sûr il y a tout un tas de possibilité d’amélioration au script ! Par exemple la possibilité de pouvoir arrêter un téléchargement par la simple suppression de son fichier associé dans ~/.dm serait sympathique.

AltStyle によって変換されたページ (->オリジナル) /