Как я могу указать, что curl (через командную строку) перезаписывает файл, если он уже существует?

11

Я использую curl в этом синтаксисе:

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

Если я запускаю эту команду дважды, я получаю два файла:

myfile.jpg
myfile-1.jpg

Как я могу сказать CURL, что я хочу перезаписать файл, если он существует?

УХО
источник
5
Невозможно воспроизвести: какая curlверсия на какой системе?
энзотиб

Ответы:

21

Использование:

curl http://mysite.com/myfile.jpg > myfile.jpg
CJC
источник
2
И заранее убедитесь, что у вас не noclobberвключена опция ( set +o noclobber).
rozcietrzewiacz
0

Я столкнулся с той же проблемой, и я хочу использовать одно и то же имя файла независимо от того, что серверная часть дает, в вашем случае вы можете получить имя файла по basename

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

тогда вы можете написать вспомогательную функцию bash, например:

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

но в моем случае имя файла даже не является частью URL-адреса, оно идет с расположением содержимого; с curl командная строка

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

вы можете игнорировать -fSLдескрипторы it, если серверная часть дает 302 Redirection; -Rметка времени на стороне сервера, -Jчтобы учитывать сторону сервера Content-Dispositionи -Oпереключаться в режим загрузки вместо выгрузки на терминал;

Тем не менее, он по-прежнему страдает от отказа перезаписать, если имя файла существует; Я хочу, чтобы он перезаписывал, если Last-Modifiedвременная метка на стороне сервера новее;

в конечном итоге решение Wget, которое он может сделать так:

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

-Nявляется проверка на стороне сервера tiemstamp и перезаписать только тогда , когда на стороне сервера имеет новую версию; --content-dispositionсчитать Content-Dispositionзаголовок; и поведение wget по умолчанию заключается в загрузке файла с именем, данным со стороны сервера.

в вашем случае, если вам не нужна метка времени, это просто

$ wget -O myfile.jpg http://mysite.com/myfile.jpg
user5672998
источник