Wie kann ich festlegen, dass Curl (über die Befehlszeile) eine Datei überschreibt, wenn sie bereits vorhanden ist?


11

Ich verwende Curl in dieser Syntax:

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

Wenn ich diesen Befehl zweimal ausführe, erhalte ich zwei Dateien:

myfile.jpg
myfile-1.jpg

Wie kann ich CURL mitteilen, dass die Datei überschrieben werden soll, falls vorhanden?


4
Kann nicht reproduzieren: Welche curlVersion auf welchem ​​System?
Enzotib

Antworten:


21

Benutzen:

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

2
Stellen Sie vorher sicher, dass die noclobberOption nicht aktiviert ist ( set +o noclobber).
Rozcietrzewiacz

0

Ich bin auf dasselbe Problem gestoßen und möchte denselben Dateinamen auf jeder Serverseite wiederverwenden. In Ihrem Fall erhalten Sie möglicherweise den Dateinamen von basename

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

Dann können Sie eine Helfer-Bash-Funktion schreiben wie:

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

aber in meinem Fall ist der Dateiname nicht einmal Teil der URL, er kommt mit inhaltlicher Disposition; mit curl ist die Kommandozeile

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

Sie können die -fSLHandles ignorieren , wenn die Serverseite 302 Redirection ausgibt. den -RZeitstempel für die Serverseite, -Jum die Serverseite zu berücksichtigen Content-Dispositionund -Ozum Download-Verhalten zu wechseln, anstatt auf dem Terminal zu sichern;

Es leidet jedoch immer noch unter der Weigerung, das Überschreiben zu verweigern, wenn der Dateiname vorhanden ist. Ich möchte, dass es überschrieben wird, wenn der serverseitige Last-ModifiedZeitstempel neuer ist.

endet mit einer wget-Lösung, die dies kann:

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

Das -Nist, den serverseitigen Zeitstempel zu überprüfen und nur zu überschreiben, wenn die serverseitige Version neu ist. --content-dispositionist Content-DispositionHeader zu betrachten ; Das Standardverhalten von wget ist das Herunterladen auf den von der Serverseite angegebenen Dateinamen.

In Ihrem Fall ist es nur so, wenn Sie sich nicht für den Zeitstempel interessieren

$ wget -O myfile.jpg http://mysite.com/myfile.jpg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.