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?

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.)


+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

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.


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+\]$"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.