![Bash:通过终端从网站下载最新版本的程序](https://linux22.com/image/880405/Bash%EF%BC%9A%E9%80%9A%E8%BF%87%E7%BB%88%E7%AB%AF%E4%BB%8E%E7%BD%91%E7%AB%99%E4%B8%8B%E8%BD%BD%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%E7%9A%84%E7%A8%8B%E5%BA%8F.png)
所以我经常修修补补。这意味着我往往不得不重新安装我的操作系统,因为我做了一些疯狂的事情并破坏了它。我不介意,修修补补很有趣。但为了让我的生活更轻松,我正在编写一个 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
命令提供了一种从其余行中提取该字符串的简单方法。
其他应用程序可能有更复杂的下载页面,可能需要使用更复杂的脚本sed
,awk
或者可能需要功能更齐全的语言,如 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"