给定网络服务器上的文件(例如, http: //foo.com/bar.zip -> 只能通过 HTTP 访问),有没有办法在不下载的情况下获取日期属性(例如,日期 [created, modified])首先是整个档案?
现在,我下载存档并以编程方式读取属性。问题是存档有几十个 MiB,所以下载整个文件并最终读取几个字节的信息似乎是一种资源浪费。
我意识到带宽实际上是免费的,但无论如何我都不喜欢浪费。
给定网络服务器上的文件(例如, http: //foo.com/bar.zip -> 只能通过 HTTP 访问),有没有办法在不下载的情况下获取日期属性(例如,日期 [created, modified])首先是整个档案?
现在,我下载存档并以编程方式读取属性。问题是存档有几十个 MiB,所以下载整个文件并最终读取几个字节的信息似乎是一种资源浪费。
我意识到带宽实际上是免费的,但无论如何我都不喜欢浪费。
尝试从标题中读取Last-Modified
请务必使用 HTTP HEAD 请求而不是 HTTP GET 请求来仅读取 HTTP 标头。如果您执行 HTTP GET,您将下载整个文件,即使您决定只检查 HTTP 标头。
只是为了简单起见,这里是来自@ihorko 和@JanThomä 的现有(完美)答案的汇编,它们使用 curl。当然,其他选项也可用,但这是一个功能齐全的答案。
使用 curl-I
选项:
-I, --head
(HTTP/FTP/FILE) 仅获取 HTTP 标头!HTTP 服务器具有 HEAD 命令,它用于获取文档标题以外的任何内容。当用于 FTP 或 FILE 文件时,curl 仅显示文件大小和上次修改时间。
此外,-s
这里的选项很好:
-s, --silent
静音或静音模式。不要显示进度表或错误消息。使 Curl 静音。它仍然会输出您要求的数据,甚至可能输出到终端/标准输出,除非您重定向它。
因此,这样的事情可以解决问题:
curl -sI http://foo.com/bar.zip | grep 'Last-Modified' | cut -d' ' -f 2-