Я пишу скрипт bash для периодической загрузки установочного файла с использованием cURL. Проблема заключается в следующем, файл имеет размер около 110 МБ и всегда имеет одинаковое имя файла.

Я могу скачать файл, проверить его хэш (md5, sha1) и сравнить его с ранее загруженным файлом:

  • если хеш равен, файл такой же и не обновлялся: в этом случае я скачал его без причины.
  • если хеш другой, файл на веб-сервере является новой версией: в этом случае я использую этот файл и обновляюсь до новой версии.

Я хотел бы запускать этот скрипт каждые полчаса, и загрузка 110 МБ ни за что (та же версия файла) беспокоит меня. Есть ли способ загрузить первые 500 КБ с помощью curl в командной строке?

Мой текущий обходной путь - сравнить размер файла с заголовком HTTP, но я все же хотел бы получить ответ на вопрос выше и узнать, возможно ли это. Большое спасибо.

curl -sI ' http://domain.tld/uri/updater/getLatest.etcenter?c = var & asi = allright ' -H 'Host: domain.tld' -H 'Пользователь-агент: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv: 11.0) как Gecko '-H' Accept: text/html, application/xhtml+xml, application/xml; q = 0,9, / ; q = 0,8 '-H' Accept-Language: en-US , en; q = 0,5 '-H' Accept-Encoding: gzip, deflate, br '-H' DNT: 1 '-H' Соединение: keep-alive '| grep 'Content-Length:'

1 ответ1

1

Можете ли вы доверять датам изменения вашего файла как на клиенте, так и на сервере? Если это так, вы можете использовать функциональность HTTP "условное GET"/«If-Modified-Since» с параметром curl s -z . Не нужно ничего скачивать вообще. Это встроенная функциональность протокола HTTP, которая с самого начала активно использовалась повсеместно.

Не нужно ничего скачивать, если дата изменения файла на сервере не новее, чем дата, которую вы скачали в прошлый раз.

Для вашего bash скрипта рассмотрите возможность использования stat(1) чтобы найти время модификации локального файла, чтобы вы могли передать эту информацию в curl -z … .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .