2012-08-08 21 views

Respuesta

17

Se podía poner su llamada a curl dentro de un bloque de if:

if ! [ -f /home/$outputfile ]; then 
    curl -o /home/$outputfile "url" 
fi 

También tenga en cuenta que en su ejemplo, tienes $url entre comillas simples , que no hará lo que quieras. Compare:

echo '$HOME' 

Para:

echo "$HOME" 

Además, curl tiene una opción --silent que puede ser útil en los scripts.

+0

muy útil, gracias por señalarlo. pero estoy haciendo esto a través de php, ¿cómo puedo ejecutar esa declaración if a través de php? – thevoipman

+0

No sé PHP en la cabeza, pero estoy seguro de que tiene un mecanismo relativamente simple para ver si existe un archivo. –

4

uso wget con --no-clobber lugar:

-nc, --no-clobber: Skip descargas que descargar los archivos existentes.

Ejemplo:

wget -nc -q -O "/home/$outputfile" "$url" 
+1

¿me puede guiar por favor sobre cómo usar con wget? – thevoipman

+2

Inicialmente estaba usando wget, pero luego cambié a curl porque quería que el archivo recién descargado tuviera la marca de tiempo de cuando se descargó. al usar wget, no genera una nueva marca de tiempo, sino que cualquier marca de tiempo es de la fuente que copió. ¿Cómo puedo generar nuevas marcas de tiempo? – thevoipman

+0

'-N' apaga la marca de tiempo en wget. –

1

El curl puede admitir omitir los archivos cuando lo usa con -O y -J, pero su comportamiento es incoherente.

El -J (--remote-header-name) básicamente le dice a la opción -O (--remote-name) para utilizar el nombre de archivo especificado Content-Disposition servidor en lugar de extraer un nombre de archivo de la URL. De esta forma, el curl no sabe realmente qué nombre de archivo devolverá el servidor, por lo que puede ignorar el archivo existente por precaución de seguridad.

Fuente: Re: -J "Refusing to overwrite..."

Por ejemplo:

$ curl -LJO -H 'Accept: application/octet-stream' 'https://api.github.com/repos/x/y/releases/assets/12345 
Warning: Refusing to overwrite my_file.bin: File 
Warning: exists 
curl: (23) Failed writing body (0 != 16384) 

Sin embargo, como ya se ha mencionado, su comportamiento es impredecible y no funciona para todos los archivos.

2

Puede usar la opción curl -C -. Esta opción se utiliza para reanudar una descarga interrumpida, pero omitirá la descarga si el archivo ya está completo. Tenga en cuenta que el argumento -C es un solo guión. Una desventaja podría ser que curl aún se contacte brevemente con el servidor remoto para solicitar el tamaño del archivo.

Cuestiones relacionadas