Zum Beispiel:
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
Wie kann ich es so aussehen lassen?
downloading: TheFile.jpeg ...
25% [======> ] 614,424 173.62K/s ETA 00:14
Ich weiß, dass Curl das kann, aber ich muss wget bekommen, um diesen Job zu machen.
wget -nv
ist ungefähr der nächste, den Sie erreichen werden, und es wird kein Fortschrittsbalken angezeigt, sondern nur eine einzeilige Zusammenfassung, wenn der Download abgeschlossen ist.curl
kann Dateien herunterladen und einen einfachen Fortschrittsbalken erstellen:echo "downloading: $file ..." && curl --progress-bar --remote-name --location "$url"
Antworten:
Sie können den folgenden Filter verwenden:
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 }
Verwendung:
$ 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]
Diese Funktion hängt von einer Sequenz ab
0x0d0x0a0x0d0x0a0x0d
, die unmittelbar vor dem Start des Fortschrittsbalkens gesendet wird. Dieses Verhalten kann implementierungsabhängig sein.quelle
%c
durch%s
zu beheben diese:�
Verwenden:
-q
: Schalten Siewget
den Ausgang aus--show-progress
: Erzwingen Siewget
die Anzeige des Fortschrittsbalkens, unabhängig davon, auf welche Ausführlichkeitsstufe eingestellt istquelle
wget: unrecognized option '--show-progress'
? Wissen Sie, ob dies nur in neueren Wget-Versionen vorhanden ist?--progress=bar:force:noscroll
zusammen mit-q
und--show-progress
. Dies funktioniert gut für eine Docker-Datei innerhalb eines Builds.--progress=bar:force:noscroll
zu verhindern, dass die Zeilenumbrüche generiert werden!Verwenden Sie diese Flags:
quelle
force 2>&1
das Scheintwget -q --show-progress --progress=bar
mir nur die gleiche Leistung zu liefern.Sie können die
follow
Option verwendentail
:Das
+6
ist, um die ersten 6 Zeilen zu löschen. Dies kann in Ihrer Versionwget
oder Ihrer Sprache unterschiedlich sein.Sie müssen
--progress=bar:force
ansonsten wget-Schalter für dendot
Typ verwenden.Der Nachteil ist, dass die Aktualisierung weniger häufig ist als bei wget (sieht aus wie alle 2 Sekunden). Die
--sleep-interval
Option vontail
scheint nur dafür gedacht zu sein, aber es hat nichts für mich geändert.quelle
wget somesite.com/TheFile.jpeg --progress=bar:force 2>&1 | tail -f -n +8
Die Option ist
--show-progress
, wie von anderen erwähnt, die beste Option, sie ist jedoch erst seit GNU wget 1.16 verfügbar , siehe Bemerkenswerte Änderungen in wget 1.16 .Um sicher zu gehen, können wir zunächst prüfen, ob dies
--show-progress
unterstützt wird:# set progress option accordingly wget --help | grep -q '\--show-progress' && \ _PROGRESS_OPT="-q --show-progress" || _PROGRESS_OPT="" wget $_PROGRESS_OPT ...
Vielleicht ist es an der Zeit, nur darüber nachzudenken
curl
.quelle
Sie können Standardoptionen verwenden:
quelle
Dies ist ein weiteres Beispiel, das Ihnen vielleicht helfen wird
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" }
quelle
Hier ist eine Lösung, die Ihnen einen Punkt für jede Datei (oder Zeile) anzeigt. Dies ist besonders nützlich, wenn Sie mit herunterladen
--recursive
. Dies fängt keine Fehler ab und kann geringfügig abweichen, wenn zusätzliche Zeilen vorhanden sind. Für den allgemeinen Fortschritt bei vielen Dateien ist dies jedoch hilfreich:wget -r -nv https://example.com/files/ | \ awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }'
quelle
Dies ist keine wörtliche Antwort, aber dieses Snippet könnte auch für einige hilfreich sein, die hierher kommen, z. B. "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
Was für mich entscheidend war, ist
stdbuf(1)
.quelle