92 votes

Comment puis-je afficher uniquement la barre de progression de wget ?

Par exemple :

wget http://somesite.com/TheFile.jpeg

    downloading: TheFile.tar.gz ...
    --09:30:42--  http://somesite.com/TheFile.jpeg
               => `/home/me/Downloads/TheFile.jpeg'
    Resolving somesite.co... xxx.xxx.xxx.xxx.
    Connecting to somesite.co|xxx.xxx.xxx.xxx|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 1,614,820 (1.5M) [image/jpeg]

    25% [======>                              ] 614,424      173.62K/s    ETA 00:14

How can I get it to look like the following?

    downloading: TheFile.jpeg ...
    25% [======>                              ] 614,424      173.62K/s    ETA 00:14

Je sais que Curl peut faire ça. Cependant, j'ai besoin de faire en sorte que wget fasse ce travail.

1 votes

Je ne pense pas que cela soit possible sans écrire un script pour analyser la sortie de wget. wget -nv est ce qui s'en rapproche le plus, et il n'affiche pas de barre de progression, mais seulement un résumé d'une ligne lorsque le téléchargement est terminé.

3 votes

Wget --progress=bar:force:noscroll

2 votes

curl peut télécharger des fichiers et produire une simple barre de progression : echo "downloading: $file ..." && curl --progress-bar --remote-name --location "$url"

215voto

Lord Bo Points 2675

Utilisez :

wget http://somesite.com/TheFile.jpeg -q --show-progress
  • -q : Éteindre wget sortie de l'entreprise

  • --show-progress : Force wget pour afficher la barre de progression quel que soit son niveau de verbosité

13 votes

Pour moi, cela montre wget: unrecognized option '--show-progress' ? Savez-vous si ce problème est uniquement présent dans les nouvelles versions de wget ?

10 votes

13 votes

Il doit y avoir une différence entre les versions, mais pour qu'il fonctionne comme annoncé, pour la version 1.19, je dois également ajouter l'option suivante : --progress=bar:force:noscroll ainsi que le -q y --show-progress . Cela fonctionne très bien pour un fichier Docker dans une construction.

29voto

Dennis Williamson Points 105818

Vous pouvez utiliser le filtre suivant :

progressfilt ()
{
    local flag=false c count cr=$'\r' nl=$'\n'
    while IFS='' read -d '' -rn 1 c
    do
        if $flag
        then
            printf '%s' "$c"
        else
            if [[ $c != $cr && $c != $nl ]]
            then
                count=0
            else
                ((count++))
                if ((count > 1))
                then
                    flag=true
                fi
            fi
        fi
    done
}

Utilisation :

$ wget --progress=bar:force http://somesite.com/TheFile.jpeg 2>&1 | progressfilt
100%[======================================>] 15,790      48.8K/s   in 0.3s

2011-01-13 22:09:59 (48.8 KB/s) - 'TheFile.jpeg' saved [15790/15790]

Cette fonction dépend d'une séquence de 0x0d0x0a0x0d0x0a0x0d est envoyé juste avant le démarrage de la barre de progression. Ce comportement peut dépendre de l'implémentation.

0 votes

Si vous n'avez pas au moins la version 1.16 de wget, c'est utile !

1 votes

Pour éviter un bug avec le codage des caractères, vous devez remplacer %c par %s pour régler ce problème :

0 votes

@HorsSujet : Ceux que je vois proviennent des guillemets simples gauche et droit Unicode. Je vais modifier ma réponse pour faire le changement. Merci pour le rapport.

25voto

Amir Khalili Points 231

Utilisez ces drapeaux :

wget  -q --show-progress --progress=bar:force 2>&1

1 votes

La meilleure réplique. Je ne comprends pas pourquoi ce n'est pas la réponse choisie.

0 votes

Qu'est-ce que force 2>&1 faire ? Juste wget -q --show-progress --progress=bar semble donner le même résultat pour moi.

1 votes

Celui-ci est le gagnant. C'est un bug dans Stack Overflow que ce ne soit pas la meilleure réponse.

13voto

Metaxal Points 923

Vous pouvez utiliser le follow option de tail :

wget somesite.com/TheFile.jpeg --progress=bar:force 2>&1 | tail -f -n +6

El +6 est de supprimer les 6 premières lignes. Cela peut être différent sur votre version de wget ou votre langue.

Vous devez utiliser --progress=bar:force sinon, wget passe à l'option dot type.

L'inconvénient est que le rafraîchissement est moins fréquent qu'avec wget (toutes les 2 secondes, semble-t-il). Le site --sleep-interval option de tail semble être destiné à ça, mais ça n'a rien changé pour moi.

13voto

ryenus Points 679

L'option --show-progress comme indiqué par d'autres, est la meilleure option, mais elle n'est disponible que depuis GNU wget 1.16 voir Changements notables dans wget 1.16 .

Pour être sûr, nous pouvons d'abord vérifier si --show-progress est prise en charge :

# set progress option accordingly
wget --help | grep -q '\--show-progress' && \
  _PROGRESS_OPT="-q --show-progress" || _PROGRESS_OPT=""

wget $_PROGRESS_OPT ...

Il est peut-être temps d'envisager d'utiliser simplement curl .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X