Comment puis-je spécifier que curl (via la ligne de commande) écrase un fichier s'il existe déjà?


11

J'utilise curl dans cette syntaxe:

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

Si j'exécute cette commande deux fois, j'obtiens deux fichiers:

myfile.jpg
myfile-1.jpg

Comment puis-je dire à CURL que je veux qu'il écrase le fichier s'il existe?


4
Impossible de reproduire: quelle curlversion sur quel système?
enzotib

Réponses:


21

Utilisation:

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

2
Et au préalable, assurez-vous que l' noclobberoption n'est pas activée ( set +o noclobber).
rozcietrzewiacz

0

J'ai rencontré le même problème et je veux réutiliser le même nom de fichier quel que soit le côté serveur, dans votre cas, vous pouvez obtenir le nom de fichier en basename

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

alors vous pouvez écrire une fonction bash d'aide comme:

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

mais dans mon cas, le nom de fichier ne fait même pas partie de l'url, il vient avec la disposition du contenu; avec curl la ligne de commande est

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

vous pouvez ignorer ce -fSLqu'il gère si le côté serveur donne la redirection 302; l' -Rhorodatage côté serveur, -Jpour prendre en compte le côté serveur Content-Disposition, et -Opour passer au comportement de téléchargement au lieu de vider sur le terminal;

cependant, il souffre toujours de refuser d'écraser si le nom de fichier existe; Je veux qu'il écrase si l' Last-Modifiedhorodatage côté serveur est plus récent;

se retrouve avec une solution wget, il est capable de le faire:

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

l' -Nest de vérifier tiemstamp côté serveur et remplacer uniquement lorsque le côté serveur a une nouvelle version; --content-dispositionest de considérer l'en- Content-Dispositiontête; et le comportement par défaut de wget est de télécharger, vers le nom de fichier donné du côté serveur.

dans votre cas, si vous ne vous souciez pas de l'horodatage, c'est juste

$ wget -O myfile.jpg http://mysite.com/myfile.jpg
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.