Come posso specificare che l'arricciatura (tramite riga di comando) sovrascrive un file se esiste già?


11

Sto usando il ricciolo in questa sintassi:

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

Se eseguo questo comando due volte, ottengo due file:

myfile.jpg
myfile-1.jpg

Come posso dire a CURL che voglio che sovrascriva il file se esiste?


4
Impossibile riprodurre: quale curlversione su quale sistema?
enzotib,

Risposte:


21

Uso:

curl http://mysite.com/myfile.jpg > myfile.jpg

2
E prima, assicurati di non avere l' noclobberopzione abilitata ( set +o noclobber).
rozcietrzewiacz,

0

Ho riscontrato lo stesso problema e voglio riutilizzare lo stesso nome file qualunque sia il lato server, nel tuo caso potresti ottenere il nome file basename

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

quindi puoi scrivere una funzione di supporto bash come:

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

ma nel mio caso il nome file non fa nemmeno parte dell'URL, viene fornito con content-disposition; con arricciatura la riga di comando è

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

è possibile ignorare gli -fSLhandle se il lato server fornisce il reindirizzamento 302; il -Rtimestamp per il lato server, -Jper considerare il lato server Content-Dispositione -Opassare al comportamento di download invece di scaricare sul terminale;

tuttavia, soffre ancora di rifiutare di sovrascrivere se esiste il nome del file; Voglio che sovrascriva se il Last-Modifiedtimestamp sul lato server è più recente;

finisce con una soluzione di wget che è in grado di farlo:

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

il -Nè quello di verificare lato tiemstamp server e sovrascrivere solo quando lato server ha nuova versione; --content-dispositionè considerare l' Content-Dispositionintestazione; e il comportamento predefinito di wget è scaricare, nel nome file fornito dal lato server.

nel tuo caso, se non ti interessa il timestamp, è solo

$ wget -O myfile.jpg http://mysite.com/myfile.jpg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.