¿Cómo puedo especificar que curl (a través de la línea de comando) sobrescribe un archivo si ya existe?

11

Estoy usando curl en esta sintaxis:

curl -o myfile.jpg http://mysite.com/myfile.jpg

Si ejecuto este comando dos veces, obtengo dos archivos:

myfile.jpg
myfile-1.jpg

¿Cómo puedo decirle a CURL que quiero que sobrescriba el archivo si existe?

cwd
fuente
44
No se puede reproducir: ¿qué curlversión en qué sistema?
enzotib

Respuestas:

21

Utilizar:

curl http://mysite.com/myfile.jpg > myfile.jpg
cjc
fuente
2
Y de antemano, asegúrese de no tener la noclobberopción habilitada ( set +o noclobber).
rozcietrzewiacz
0

Me encontré con el mismo problema y quiero reutilizar el mismo nombre de archivo, sea cual sea el lado del servidor, en su caso, puede obtener el nombre de archivo por basename

➸ basename 'http://mysite.com/myfile.jpg'
myfile.jpg

entonces puedes escribir una función bash auxiliar como:

➸ function download { name="$(basename $1)"; curl "$1" > "$name"; }
➸ download 'http://mysite.com/myfile.jpg'

pero en mi caso el nombre del archivo ni siquiera es parte de la url, viene con disposición de contenido; con curl la línea de comando es

$ curl -fSL -R -J -O 'http://some-site.com/getData.php?arg=1&arg2=...'

puede ignorar los -fSLcontroles que maneja si el lado del servidor proporciona la redirección 302; la -Rmarca de tiempo del lado del servidor, -Jpara considerar el lado del servidor Content-Dispositiony -Ocambiar a comportamiento de descarga en lugar de descargar en el terminal;

sin embargo, todavía sufre negándose a sobrescribir si existe el nombre del archivo; Quiero que se sobrescriba si la Last-Modifiedmarca de tiempo del lado del servidor es más nueva;

termina con una solución wget que puede hacerlo:

$ wget -NS --content-disposition 'http://some-site.com/getData.php?arg=1&arg2=...'

el -Nes verificar el tiemstamp del lado del servidor y sobrescribir solo cuando el lado del servidor tiene una nueva versión; --content-dispositiones considerar Content-Dispositionencabezado; y el comportamiento predeterminado de wget es descargar, al nombre de archivo dado desde el lado del servidor.

en su caso, si no le importa la marca de tiempo, es solo

$ wget -O myfile.jpg http://mysite.com/myfile.jpg
usuario5672998
fuente