在 Bash 脚本中通过 HTTP 获取远程文件的修改时间

在 Bash 脚本中通过 HTTP 获取远程文件的修改时间

我正在创建一个简单的 Bash 脚本,通过 HTTP 提取远程文件的文件修改时间/日期。

示例文件:http://example.com/bar/example.pdf

可以这样做吗没有下载实际文件?如果不下载,最佳替代方案是什么?

答案1

说实话,不是直接的。

您必须从远程站点获取数据才能获取有关文件的信息。通常这是通过请求完成的HEAD,但有些(大多数?)服务器尚未正确实现它,而是像发出请求一样提供整个文件GET。假设您已curl安装:

curl -s -v -X HEAD http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'

可能会给你你想要的,但正如所说,它高度依赖于服务器。

答案2

服务器响应通常有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选项强制不下载页面,而是检查它们的存在。

答案3

手册页--head仅告知获取标题,而我不需要-v详细模式,但-s静默模式适合 bash 脚本:

curl -s --head http://example.com/bar/example.pdf



相关内容