我通常使用 SlackBuilds 为我的 Slackware 构建软件包。我使用 wget 下载源代码,并使用变量。
通过这样的链接,版本更改时没有问题,我把 17.0.1 改为 17.0.1,然后它会自动下载,然后我构建...等等。
VERSION=16.0.1
https://download.java.net/java/GA/jdk${VERSION}/GPL/openjdk-${VERSION}_linux-x64_bin.tar.gz
问题是当 url 中出现一些随机数时,这些随机数会随着每个版本的变化而变化!在此示例中为 7147401fd7354114ac51ef3e1328291f 和 9
VERSION=16.0.1
https://download.java.net/java/GA/jdk${VERSION}/7147401fd7354114ac51ef3e1328291f/9/GPL/openjdk-${VERSION}_linux-x64_bin.tar.gz
我可以使用变量替换,但是有点糟糕,有人知道一种更优雅的方法来在更改时获取新的“随机”数字吗?使用 wget 或curl。
答案1
您可以使用 2wget
秒:
wget
网站中的 HTML 页面,其中包含可供下载的文件列表。然后提取每个href=...
.- 筛选那些
href
与您要查找的内容相匹配的模式。这可能是这样的:
https://download.java.net/java/GA/jdk(*)/*/[0-9]/GPL/openjdk-(*)_linux-x64_bin.tar.gz
使用捕获组(示例
([0-9]+\.[0-9]+)
:)从每个 URL 中提取版本选择您要下载的版本。这可能是最高版本,也可能是与您的变量匹配的版本
${VERSION}
wget
那个网址
这与uscan
debian 使用的工具。 uscan
将使用一个名为 的文件debian/watch
来完全执行我上面提到的操作,但它通常会识别软件包的最新版本(并通知开发人员他们的软件包之一有可用的更新),或者立即下载它以便开发人员可以导入它进入 debian。
uscan
做的还不止这些,包括重命名下载的存档以匹配 debian 中出现的包名称。这取决于现有的一些其他邻近文件,因此uscan
可能无法立即为您工作。它至少表明下载索引、解析 href、选择最佳索引和wget
-ing 的设计效果非常好。 uscan
是一个 Perl 脚本,不太复杂(约 4000 个 sloc,支持许多可以清除的内容),因此您可以根据您的需要进行调整。