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

Ama*_*ali 14 bash http

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

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

这可以在下载实际文件的情况下完成吗?如果没有,最好的选择是什么?

Hi-*_*gel 19

服务器响应通常有Last-Modified字段,您无需下载文件即可查看。没有必要使用-X HEAD,有一个特殊的选项-I(在-s禁止显示进度输出)

curl -sI http://example.com/bar/example.pdf | grep -i Last-Modified
Run Code Online (Sandbox Code Playgroud)

同样在我的情况下,没有安装 curl (我正在为嵌入式设备编写脚本),只是wget. wget的方式是:

wget --server-response --spider http://example.com/bar/example.pdf 2>&1 | grep -i Last-Modified
Run Code Online (Sandbox Code Playgroud)

--server-response打印头和--spider选项强制不下载网页,而是检查自己的存在。

  • 这个 `curl` 是一个比公认的更好的答案。也许使用`grep -i`,因为“最后修改”通常有不同的情况。 (2认同)
  • 对于 Google Colab 文件,没有“上次修改时间”,但有一个“日期”行,其功能相同。 (2认同)

Kar*_* S. 16

说实话,不是直接的。

您必须从远程站点获取数据以获取有关文件的信息。通常这是通过HEAD请求完成的,但是一些(大多数?)服务器没有正确实现它并传递整个文件,就像执行GET请求一样。假设您已经curl安装:

curl -s -v -X HEAD http://foo.com/bar/baz.pdf 2>&1 | grep '^< Last-Modified:'
Run Code Online (Sandbox Code Playgroud)

可能会给你你想要的,但正如所说,这在很大程度上取决于服务器。

  • “最多”?如果*任何*流行的 HTTP 服务器以这种方式违反协议,我会感到惊讶。 (6认同)
  • 我建议使用 `--head` 选项而不是 `-X HEAD`,因为它更简洁,因此命令将变为:`curl -s -v --head http://foo.com/bar/baz.pdf 2 &gt;&amp;1 | grep '^&lt; 上次修改:'` (3认同)