Wget ist stumm, zeigt jedoch Fehlermeldungen an

10

Ich möchte eine Datei mit herunterladen Wget , aber gemäß der üblichen UNIX-Philosophie möchte ich nicht, dass es ausgegeben wird etwas wenn der Download erfolgreich ist. Wenn der Download jedoch fehlschlägt, möchte ich eine Fehlermeldung.

Das -q Diese Option unterdrückt alle Ausgaben, einschließlich Fehlermeldungen. Wenn ich einschließe -nv Option stattdessen druckt Wget immer noch (auf stderr):

2012-05-03 16:17:05 URL:http://example.net/ [2966] -> "index.html" [1]

Wie kann ich auch diese Ausgabe entfernen und trotzdem Fehlermeldungen erhalten?

phihag
quelle

Antworten:

4

Lahme Hack, wenn du keine bessere Antwort bekommst:

wget {url} 2>/tmp/err.log || cat /tmp/err.log; rm /tmp/err.log

(Das 2 / gt; /tmp/err.log leitet stderr in eine tmp-Datei um; wenn wget 0 [Erfolg] zurückgibt, werden die || - Kurzschlüsse ansonsten die Fehlerprotokollwerte ausgegeben.)

Foon
quelle
+1 Ich habe vermisst, dass der gesamte Output nach stderr ging; Ich habe meine Antwort gelöscht, nur stdout nach / dev / null umzuleiten.
chepner
5
Das funktioniert, aber es ist so Lame . error_log=$(wget -nv example.net 2>&1) || echo $error_log ist eine elegantere Lösung, aber immer noch unbeholfen.
phihag
4

Versuchen curl stattdessen:

curl -fsS $url -o $file

Lange Version:

curl --fail --silent --show-error $url --output $file

GNOME-Benutzer können Gvfs ausprobieren:

gvfs-cp $url $file
grawity
quelle
1
Leider ist curl nicht auf allen Debian-Systemen vorinstalliert.
phihag
warum hinzufügen? --fail? Wäre es nicht sinnvoll, HTTP-Fehler als etwas zu behandeln, das Sie zu stderr bringen möchten?
gilad mayani
Genau das ist die Kombination von --fail und --show-error tut.
grawity
1

Da derzeit alle Wget-Ausgaben an stderr gehen, scheint es, als müssten Sie die Wget-Quelle patchen, um diesen 'eleganten Weg' zu lösen.

Der Quellentwurf von wget bestimmt den Unterschied der Ausführlichkeitsniveaus zwischen den Nachrichten und nicht nur eine einfache Aufteilung zwischen Fehlern und Fehlernachrichten.

Es gibt einen offenen Fehler darüber http://savannah.gnu.org/bugs/?33839 und dort auch etwas ältere Diskussion. Hier ist ein empfohlener Patch http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html und hier gibt es eine Antwort von Hrvoje Niksic http://www.mail-archive.com/wget%40sunsite.dk/msg03330.html .

Abgesehen davon gibt es natürlich die gute Lösung, die Sie in einem Kommentar zur weniger eleganten Lösung von Foon vorgeschlagen haben.

amotzg
quelle
0

Sie können die Ausgabe auch an weiterleiten grep und die Erfolgsmeldung herausfiltern.

Das sollte funktionieren:

wget ... -nv 2>&1 | grep -Pv "^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d URL:.*\[\d+\] -> ".*" \[\d+\]$"
Dennis
quelle