Мне нужно скачать файл с HTTP-сервера, но только если он изменился с момента последней загрузки (например, через If-Modified-Since
заголовок). Мне также нужно использовать произвольное имя для файла на моем диске.
Какой инструмент я могу использовать для этой задачи в Linux?
wget -N
не может быть использован, потому что -N
не может быть использован с -O
.
Ответы:
Попробуйте использовать
curl
вместоwget
:man curl
говорит:Если
$file
это не обязательно существует, вам нужно использовать-z
флаг условно, используяtest -e "$file"
:(Обратите внимание, что мы не указываем здесь расширение
$zflag
, поскольку мы хотим, чтобы оно подвергалось расщеплению до 0 или 2 токенов).Если ваша оболочка поддерживает массивы (например, Bash), у нас есть более безопасная и чистая версия:
источник
Переключатель wget
-N
получает файл только в том случае, если он изменился, поэтому возможный подход заключается в использовании простого-N
переключателя, который получит файл, если он потребуется, но оставит его с неправильным именем. Затем создайте жесткую ссылку, используяln -P
команду, чтобы связать ее с «файлом» с правильным именем. Связанный файл имеет те же метаданные, что и оригинал.Единственным ограничением является то, что вы не можете иметь жесткие ссылки через границы файловой системы.
источник
Скрипт Python 3.5+ для переноса команды curl:
источник
chain
:)Аналогичный подход к « проверке даты » (с «curl - time-cond») заключается в загрузке в соответствии со сравнением размера файла, т.е. загрузка только в том случае, если размер локального файла отличается от размера удаленного файла .
Это полезно, например, когда процесс загрузки не удался в середине , и, таким образом, локальный загруженный файл получает более новую дату, чем удаленный файл, но он фактически поврежден, и требуется повторная загрузка:
Опция "curl -z / --time-cond" (которая была предложена в другом ответе) не будет загружать удаленный файл в этом случае (поскольку локальный файл имеет более новую дату), но этот скрипт " проверки размера " будет!
источник