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


11

Я використовую curl у цьому синтаксисі:

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

Якщо запустити цю команду двічі, я отримаю два файли:

myfile.jpg
myfile-1.jpg

Як я можу сказати CURL, що я хочу, щоб він перезаписав файл, якщо він існує?


6
Неможливо відтворити: яка curlверсія в якій системі?
enzotib

Відповіді:


22

Використання:

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

2
І заздалегідь переконайтеся, що у вас немає noclobberопції ( set +o noclobber).
rozcietrzewiacz

0

Я зіткнувся з тією ж проблемою, і я хочу повторно використовувати те саме ім’я файлу, що б не було на сервері, у вашому випадку ви можете отримати ім'я файлу basename

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

тоді ви можете написати функцію помічника баш-типу:

➸ 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обробку, якщо сторона сервера дає перенаправлення 302; -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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.