Bash:通过终端从网站下载最新版本的程序

Bash:通过终端从网站下载最新版本的程序

所以我经常修修补补。这意味着我往往不得不重新安装我的操作系统,因为我做了一些疯狂的事情并破坏了它。我不介意,修修补补很有趣。但为了让我的生活更轻松,我正在编写一个 bash 脚本,用一个命令自动恢复所有内容。

昨晚我第一次使用它(四天的疯狂操作,砰!一切都坏了),它救了我一命。但有几个地方可以改进。

我现在寻求帮助的主要问题是获取 apt-get 工具中没有的应用程序。我将使用 Plex Media Server 作为示例。我需要直接从网站下载它。

我现在不在家,所以我面前没有脚本,但我目前正在这样做(我的代码示例中的模拟 URL)。

wget http://plex-website/downloads-page/plex-install-file-name-and-version.deb
dpkg plex-install-file-name-and-version.deb

使用 wget 下载文件,然后使用 dpkg 安装。效果非常好。

但这种方法很脆弱,因为它取决于我下载的文件的具体版本号。随着时间的推移,该具体版本号会发生变化,因此此脚本会过时。

我正在寻找一种动态的方式来编写此代码,以便我可以从网站下载文件,而无需提前硬编码版本号。理想情况下,我可以在多个网站上使用这种方法,因为 Plex 并不是唯一一个我会遇到此问题的网站。

提前致谢。

答案1

我会抓取该网站的下载页面以获取所需包的 URL。

示例:下载 32 位版本的 Plex Media Server:

url=$(curl -s https://plex.tv/downloads | grep Ubuntu32 | cut -d\" -f2)
wget "$url"
dpkg -i "${url##*/}"

对于其他软件包,您需要检查包含下载链接的页面的 HTML 源代码。在上面的例子中,我可以看到该短语Ubuntu32在 HTML 源代码中只出现了一次。幸运的是,它位于同一条线作为所需包的 URL:此 URL 是用双引号括起来的第一个文本字符串,该cut命令提供了一种从其余行中提取该字符串的简单方法。

其他应用程序可能有更复杂的下载页面,可能需要使用更复杂的脚本sedawk或者可能需要功能更齐全的语言,如 Perl、Python 或 Ruby。

答案2

我不知道您要获取什么文件以及从哪里获取,但通常有一个指向最新/稳定版本的快捷方式,例如http://plex-website/downloads-page/plex-install-file-name-LATEST.deb您可以使用它,它还会为您提供可在 dpkg 命令中使用的下载文件的相同文件名。

或者,可以使用 wget 和通配符来获取所有可能的版本,然后使用一些 bash magic 就可以找出其中的最高版本。

例如wget -r -l1 -np "http://plex-website/downloads-page/" -A "plex-install-file-name-4.*.deb"

相关内容