Я создаю простой скрипт Bash для извлечения времени / даты модификации файла из удаленного файла через HTTP.
Пример файла: http://example.com/bar/example.pdf
Можно ли это сделать без загрузки самого файла? Если нет, то какая лучшая альтернатива?
Я создаю простой скрипт Bash для извлечения времени / даты модификации файла из удаленного файла через HTTP.
Пример файла: http://example.com/bar/example.pdf
Можно ли это сделать без загрузки самого файла? Если нет, то какая лучшая альтернатива?
Ответы:
Если честно, не напрямую.
Вам нужно будет получить данные с удаленного сайта, чтобы получить информацию о файле. Обычно это делается с помощью HEAD
запроса, но некоторые (большинство?) Серверы не реализовали его правильно и доставляют файл целиком, как при выполнении GET
запроса. Предполагая, что вы curl
установили:
curl -s -v -X HEAD http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'
может дать вам то, что вы хотите, но, как уже говорилось, это сильно зависит от сервера.
HEAD
. Тем не менее, и эти сайты дадут вам результат, потому что они должны все доставлять.
--head
вариант вместо -X HEAD
как его более лаконична , поэтому команда стала бы: curl -s -v --head http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'
curl -svX HEAD
еще более кратко ...
Ответ сервера обычно имеет Last-Modified
поле, вы можете проверить его, не загружая файл. Нет необходимости в использовании -X HEAD
, нет специальной опции -I
для этого (на -s
Подавляет вывод о ходе работы ) :
curl -sI http://example.com/bar/example.pdf | grep -i Last-Modified
Также в моем случае нет установленного curl (я делаю скрипт для встроенного устройства) , просто wget
. Способ с помощью wget:
wget --server-response --spider http://example.com/bar/example.pdf 2>&1 | grep -i Last-Modified
В --server-response
печатает заголовки, и --spider
опция заставляет не загружать страницы, а проверить их существование.
curl
лучший ответ, чем принятый. Возможно, с grep -i
тех пор, как часто «последний измененный» имеет другой случай.