Wget es silencioso, pero muestra mensajes de error

10

Quiero descargar un archivo con Wget , pero según la filosofía habitual de UNIX, no quiero que muestre nada si la descarga se realiza correctamente. Sin embargo, si la descarga falla, quiero un mensaje de error.

La -qopción suprime todos los resultados, incluidos los mensajes de error. Si incluyo la -nvopción en su lugar, Wget todavía imprime (en stderr):

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

¿Cómo puedo eliminar incluso esa salida, pero aún así obtener mensajes de error?

phihag
fuente

Respuestas:

4

Hack cojo si no puedes obtener una mejor respuesta:

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

(El 2> /tmp/err.log redirige stderr a un archivo tmp; si wget devuelve 0 [éxito], los || cortocircuitos de lo contrario imprimirán los valores del registro de errores)

Foon
fuente
+1 Perdí que toda la salida iba a stderr; He eliminado mi respuesta de simplemente redirigir stdout a / dev / null.
chepner
55
Eso funciona, pero es cojo . error_log=$(wget -nv example.net 2>&1) || echo $error_logEs una solución más elegante, pero aún torpe.
phihag
4

Intenta en su curllugar:

curl -fsS $url -o $file

Versión larga:

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

Los usuarios de GNOME pueden probar Gvfs:

gvfs-cp $url $file
usuario1686
fuente
1
Desafortunadamente, curl no está preinstalado en todos los sistemas debian.
phihag
¿Por qué agregar --fail? ¿No tendría sentido tratar los errores HTTP como algo que desearía ir a stderr?
gilad mayani
Eso es precisamente lo que la combinación de --faily --show-errorhace.
user1686
1

Como actualmente toda la salida de wget va a stderr, parece que para resolver esta 'forma elegante' tendría que parchear la fuente de wget.

El diseño de la fuente de wget dicta la diferencia de nivel de verbosidad entre mensajes, en lugar de una simple división entre mensaje de error y no mensaje de error.

Hay un error abierto sobre este http://savannah.gnu.org/bugs/?33839 , y también hay una discusión más antigua. Aquí hay un parche sugerido http://www.mail-archive.com/wget%40sunsite.dk/msg03289.html y aquí hay una respuesta de Hrvoje Niksic sobre este http://www.mail-archive.com/wget % 40sunsite.dk / msg03330.html .

Aparte de eso, existe, por supuesto, la buena solución que propuso en un comentario a la solución menos elegante de Foon.

amotzg
fuente
0

También puede canalizar la salida grepy filtrar el mensaje de éxito.

Esto debería funcionar:

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