Я создаю простой скрипт 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тех пор, как часто «последний измененный» имеет другой случай.