从远程 URL 解析文件名而不下载文件

use*_*145 6 url download wget internet

我正在创建一个脚本,它应该从存储库下载最新版本的应用程序并部署应用程序。

主要问题:有几个存储库,我需要检查其中哪个具有最新版本。

例如

http://repo1/xyz/LATEST -> (redirects to) -> http://repo1/xyz/app-1.0.0.0.zip
http://repo2/xyz/LATEST -> (redirects to) -> http://repo1/xyz/app-1.1.0.0.zip
Run Code Online (Sandbox Code Playgroud)

所以我需要遍历可用的存储库并只获取一个文件名 - 无需下载过时的软件版本。

Flo*_*elf 7

像这样的事情可能对你有用:

curl -sIkL http://repo1/xyz/LATEST | sed -r '/filename=/!d;s/.*filename=(.*)$/\1/'
Run Code Online (Sandbox Code Playgroud)

查看手册页curl(1)了解选项。有趣的是-I, --head。

根据评论的要求进行解释:

这个想法是只请求 HTTP 响应头。

因此使用-I选项。-s使卷曲静音以不打印标题以外的任何内容。-k允许“不安全”的 SSL 连接(否则 curl 将拒绝自签名证书)。并-L遵循 HTTP(S) 位置重定向。

然后sed(1)用于从响应头中获取文件名。我们正在搜索该filename=字段,因此该/filename=/!d部件会从输出中删除没有该字段的任何内容。最后,该s/.*filename=(.*)$/\1/部件仅在找到该字段时才打印文件名。