![在 Bash 脚本中通过 HTTP 获取远程文件的修改时间](https://linux22.com/image/1370523/%E5%9C%A8%20Bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E9%80%9A%E8%BF%87%20HTTP%20%E8%8E%B7%E5%8F%96%E8%BF%9C%E7%A8%8B%E6%96%87%E4%BB%B6%E7%9A%84%E4%BF%AE%E6%94%B9%E6%97%B6%E9%97%B4.png)
我正在创建一个简单的 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