我正在创建一个简单的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
因为“最后修改的”经常使用,所以情况有所不同。