Curl

可以使用 curl 或 wget 自動下載 URL 嗎?

  • April 25, 2021

我通常使用 SlackBuilds 為我的 Slackware 建構軟體包。我使用 wget 下載原始碼,並使用變數。

有了這樣的連結,版本更改時沒問題,而不是16.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。

您可以使用 2wget秒:

  1. wget來自網站的 HTML 頁面,其中包含可供下載的文件列表。然後提取每個href=....
  2. 過濾那些href與您正在尋找的模式匹配的模式。這可能是這樣的:
https://download.java.net/java/GA/jdk(*)/*/[0-9]/GPL/openjdk-(*)_linux-x64_bin.tar.gz
  1. 使用擷取組(例如([0-9]+\.[0-9]+):)從每個 URL 中提取版本
  2. 選擇您要下載的版本。這可能是最高版本,也可能是與您的變數匹配的版本${VERSION}
  3. wget那個網址

uscan這與debian 使用 的工具非常相似。uscan將使用一個名為的文件debian/watch來完成我上面提到的操作,除了它通常會辨識軟體包的最新版本(並通知開發人員他們的軟體包有可用更新),或者立即下載它以便開發人員可以導入它進入debian。

uscan不僅如此,還包括重命名下載的存檔以匹配在 debian 中出現的包名稱。這取決於現有的其他一些鄰近文件,因此uscan可能無法為您開箱即用。它至少表明下載索引、解析href、選擇最佳索引以及wget-ing 的設計效果很好。 uscan是一個不太複雜的 perl 腳本(約 4000 sloc,支持您可以清除的大量內容),因此您可以根據需要對其進行調整。

引用自:https://unix.stackexchange.com/questions/646643