Я створюю простий сценарій 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
Також у моєму випадку не встановлено завиток (я роблю сценарій для вбудованого пристрою) , просто wget. Шлях із wget є:
wget --server-response --spider http://example.com/bar/example.pdf 2>&1 | grep -i Last-Modified
У --server-responseдрукує заголовки, і --spiderопція змушує не завантажувати сторінки, а перевірити їх існування.
curlкраща відповідь, ніж прийнята. Можливо, використовуючи, grep -iоскільки часто "останній модифікований" має інший випадок.