我正在创建一个简单的Bash脚本,以通过HTTP提取远程文件的文件修改时间/日期。
示例文件: http://example.com/bar/example.pdf
可以不下载实际文件就完成吗?如果没有,什么是最好的选择?
我正在创建一个简单的Bash脚本,以通过HTTP提取远程文件的文件修改时间/日期。
示例文件: http://example.com/bar/example.pdf
可以不下载实际文件就完成吗?如果没有,什么是最好的选择?
Answers:
老实说,不是直接的。
您将必须从远程站点获取数据以获取有关文件的信息。通常,这是通过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因为“最后修改的”经常使用,所以情况有所不同。