2011-01-13 13 views
39

Per esempio:Come mostrare solo la barra di avanzamento di wget?

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 

come posso farlo sembrare come questo

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

So ricciolo può farlo, ma ho bisogno di ottenere wget per fare quel lavoro .

+1

Non penso che sia possibile senza scrivere uno script per analizzare l'output di wget. 'wget -nv' è il più vicino che si sta per ottenere, e in realtà non mostra una barra di avanzamento, ma solo un riepilogo di una riga al termine del download. – cdhowie

risposta

18

È possibile utilizzare il seguente filtro:

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

Usage:

$ 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] 

Questa funzione dipende da una sequenza di 0x0d0x0a0x0d0x0a0x0d essere inviato a destra prima la barra di avanzamento viene avviato. Questo comportamento può dipendere dall'implementazione.

-4
curl -o pic.png http://somesite.com/pic.png 

Mostrami solo informazioni progresso senza l'URL/indirizzo di chiacchiere.

+2

Ha detto in particolare che non voleva usare 'arricciato ' –

2

questo è un altro exemple, forse vi aiuterà a

download() { 
    local url=$1 
    echo -n " " 
    wget --progress=dot $url 2>&1 | grep --line-buffered "%" | sed -u -e "s,\.,,g" | awk '{printf("\b\b\b\b%4s", $2)}' 
    echo -ne "\b\b\b\b" 
    echo " DONE" 
} 
4

È possibile utilizzare le opzioni standard:

wget --progress=bar http://somesite.com/TheFile.jpeg 
+0

Non mi occupo di altre distro, ma questo non è sicuramente quello che OP chiedeva, almeno su Ubuntu. Ad esempio, mostra ancora altre informazioni, ma l'OP ha chiesto solo "barra di avanzamento" ... –

6

È possibile utilizzare l'opzione di tailfollow:

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

Il +6 elimina le prime 6 righe. Potrebbe essere diverso nella tua versione di wget o nella tua lingua.

È necessario utilizzare --progress=bar:force altrimenti si passa al tipo dot.

Lo svantaggio è che il refresh è meno frequente rispetto a wget (sembra ogni 2 secondi). L'opzione --sleep-interval di tail sembra essere pensata solo per quello, ma non ha cambiato nulla per me.

+0

sai perché passa al tipo di punto? qualche problema di tipo TERM? la forza ha funzionato per me - grazie! –

73

Usa:

wget http://somesite.com/TheFile.jpeg -q --show-progress 

-q - Disattiva uscita di Wget

--show-progress - Forza wget per visualizzare la barra di avanzamento in ogni verbosità

+5

Per me questo mostra 'wget: opzione non riconosciuta '--show-progress''? Sai se questo è presente solo nelle nuove versioni di wget? –

+7

@ UliKöhler [la bandiera esiste solo dal 1.16] (http://stackoverflow.com/a/32491843/1267663) – Whymarrh

10

L'opzione --show-progress, come sottolineato da altri , è l'opzione migliore, ma è disponibile solo dal momento che GNU wget 1.16, vedere Noteworthy changes in wget 1.16.

di essere al sicuro, siamo in grado di controllare prima se --show-progress è supportato:

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

wget $_PROGRESS_OPT ... 

Forse è il momento di prendere in considerazione solo usando curl.

0

Questa non è letteralmente una risposta, ma questo frammento potrebbe anche essere utile ad alcuni che vengono qui per es. "Zenity wget GUI":

LANG=C wget -O /dev/null --progress=bar:force:noscroll --limit-rate 5k http://nightly.altlinux.org/sisyphus/ChangeLog 2>&1 | stdbuf -i0 -o0 -e0 tr '>' '\n' | stdbuf -i0 -o0 -e0 sed -rn 's/^.*\<([0-9]+)%\[.*$/\1/p' | zenity --progress --auto-close

Qual è stato fondamentale per me è stdbuf(1).

0

Ecco una soluzione che ti mostrerà un punto per ogni file (o linea, se è per questo). È particolarmente utile se si sta scaricando con --recursive. Questo non rileva errori e può essere leggermente disattivato se ci sono linee aggiuntive, ma per i progressi generali su molti file è utile:

wget -r -nv https://example.com/files/ | \ 
    awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }' 
Problemi correlati