2012-08-30 12 views

Respuesta

69

El uso de --fail hará que el estado de salida sea distinto de cero en una solicitud fallida. El uso de --head evitará descargar el contenido del archivo, ya que no lo necesitamos para este control. El uso de --silent evitará que el propio cheque emita el estado o los errores.

if curl --output /dev/null --silent --head --fail "$url"; then 
    echo "URL exists: $url" 
else 
    echo "URL does not exist: $url" 
fi 

Si el servidor rechaza peticiones HEAD, una alternativa es solicitar sólo el primer byte del archivo:

if curl --output /dev/null --silent --fail -r 0-0 "$url"; then 
+4

Incluir '-o/dev/null' para suprimir la impresión del encabezado a stdout –

+0

@ShawnChin Buena llamada, gracias. –

+0

Genial .... Está funcionando bien.Gracias –

13

me parece wget para ser una mejor herramienta para esto que RIZO; hay menos opciones para recordar y puedes verificar su valor de verdad en bash para ver si tuvo éxito o no de manera predeterminada.

if wget --spider http://google.com 2>/dev/null; then 
    echo "File exists" 
else 
    echo "File does not exist" 
fi 

La opción --spider hace wget sólo comprueban el archivo en lugar de descargarlo, y 2> /dev/null silencios de wget salida stderr.

+0

El "realmente puede verificar su valor de verdad en bash" no es exclusivo de wget; con '--fail', uno puede hacer lo mismo con curl. –

+3

Es por eso que dije "por defecto". Intenta ejecutar 'wget google.com/asdf' y' curl google.com/asdf'. 'curl' devuelve EXIT_SUCCESS de forma predeterminada cuando se produce un error 404, mientras que' wget' devuelve EXIT_FAILURE. – ailnlv

+0

Esta solución funciona mejor para mí, al menos – raffi

Cuestiones relacionadas