以编程方式获取最新的下载链接

时间:2014-03-19 15:30:48

标签: bash

我希望能够使用我的bash脚本自动下载最新版本的软件。不幸的是,网站上没有像github那样的最新发布链接。 在我的情况下,我需要下载最新的稳定版本的Nginx

目前我用这个 的 http://nginx.org/download/nginx-1.4.7.tar.gz 然后我从源代码编译

问题是我需要不时手动检查更新并更新链接。

有什么方法可以让我的脚本自动获取最新稳定版本的Nginx

通过yum安装P.S不是一个选项

7 个答案:

答案 0 :(得分:4)

<强>更新
通过http://nginx.org/en/download.htmlhttp://nginx.org/download/确定并下载最新的 稳定版本的解决方案,在以下原始解决方案中使用,不区分稳定版和主线版版本) - 适用于Linux和OSX:

# Determine the latest stable version's download URL, assumed to be 
# the first `/download/nginx-*.tar.gz`-like link following the header 
# "Stable version".
latestVer=$(curl -s 'http://nginx.org/en/download.html' | 
   sed 's/</\'$'\n''</g' | sed -n '/>Stable version$/,$ p' | 
   egrep -m1 -o '/download/nginx-.+\.tar\.gz')

# Download.
curl "http://nginx.org${latestVer}" > nginx-latest.tar.gz

注意:这取决于页面http://nginx.org/en/download.html的HTML结构的细节,这不是最强大的解决方案。


原始解决方案,通过http://nginx.org/download/确定最新版本,其中稳定版和主要版之间没有区别:

Linux 上,尝试:

 # Determine latest version:
 latestVer=$(curl 'http://nginx.org/download/' | 
   grep -oP 'href="nginx-\K[0-9]+\.[0-9]+\.[0-9]+' | 
   sort -t. -rn -k1,1 -k2,2 -k3,3 | head -1)

 # Download latest version:
 curl "http://nginx.org/download/nginx-${latestVer}.tar.gz" > nginx-latest.tar.gz

这不依赖于http://nginx.org/download/的特定列表订单;相反,版本号被提取并适当地排序。


OSX - 其中grep不支持-P\K删除匹配的左侧部分不可用,请尝试:

# Determine latest version:
latestVer=$(curl 'http://nginx.org/download/' | 
 egrep -o 'href="nginx-[0-9]+\.[0-9]+\.[0-9]+' | sed 's/^href="nginx-//' |
 sort -t. -rn -k1,1 -k2,2 -k3,3 | head -1)

# Download latest version:
curl "http://nginx.org/download/nginx-${latestVer}.tar.gz" > nginx-latest.tar.gz

答案 1 :(得分:2)

这将确定最新的稳定版本:

$ lynx -dump http://nginx.org/en/download.html \
    | awk '/Stable/{t=1}t&&/nginx-/{$0=$2;sub(/.+\]/,"");print;exit}'
nginx-1.4.7

使用此结果汇总正确的下载网址,并使用wget / curl进行下载。

这将确定最新版本的下载网址:

$ lynx -dump http://nginx.org/download/ | awk '/nginx-.*\.zip$/{url=$2}END{print url}'
http://nginx.org/download/nginx-1.5.9.zip

这取决于他们的网络服务器按日期排序目录列表​​(它目前正在进行)。

答案 2 :(得分:0)

如果可以使用第三方工具,这是使用多平台网络抓取CLI xidel 的另一个选项:

curl "http://nginx.org$( \
   xidel 'http://nginx.org/en/download.html' \
     -e '(//a[matches(@href, "/download/nginx-.+\.tar\.gz$")])[2]/@href' \
   )" -O

该命令使用XPath表达式来提取感兴趣的URL;这里的假设是页面上的第二 /download/nginx-*.tar.gz链接是 stable 版本(第一个代表主线版本)。

这不是最强大的方法,但这是刮取不是为程序化消费而设计的网页的固有问题。

答案 3 :(得分:0)

https://drupal.stackexchange.com/a/23701

找到了它
wget http://lftp.yar.ru/ftp/$(wget -O- http://lftp.yar.ru/ftp/ | egrep -o 'lftp-[0-9\.]+.tar.gz' | sort -V  | tail -1)

可能是一个更简单的解决方案

答案 4 :(得分:0)

获取最新的nginx和naxsi版本,不需要排序,但需要jq

latestNginx=$(curl -s http://hg.nginx.org/nginx/tags |
  grep "^ *release-" | head -1 | cut -c 9-)
latestNaxsi=$(curl -s https://api.github.com/repos/nbs-system/naxsi/releases |
  jq -r .[].tag_name | grep -v rc | head -1)

答案 5 :(得分:0)

这是获取和下载最新稳定版nginx的另一个简短解决方案:

这已在Linux环境中进行了测试,可能无法在MacOS上运行

  

Mainline 替换 Stable 以获得最新的主线版本

curl "http://nginx.org$(curl -s http://nginx.org/en/download.html | grep -oP 'Stable version.*?\K(/download/.*?tar.gz)')" --output nginx-stable.tar.gz

答案 6 :(得分:0)

能够使用相同的方法编写脚本,也无需任何特殊要求即可下载最新的当前/稳定节点版本。

下载最新的LTS节点版本:

latestLTSNode=$(curl -s https://nodejs.org/en/download/ | grep -E "Latest LTS Version: <strong>[[:digit:]]+.[[:digit:]]+.[[:digit:]]+"|grep -oE "[[:digit:]]+.[[:digit:]]+.[[:digit:]]+"| head -n1) ; nodejs_url="https://nodejs.org/dist/v${latestLTSNode}/node-v${latestLTSNode}-linux-x64.tar.xz"; wget ${nodejs_url} ; filename=$(basename $nodejs_url); filefolder=$(echo $filename | sed 's|.tar.xz||g') ;

下载最新的当前节点版本:

latestCurrentNode=$(curl -s https://nodejs.org/en/download/current/ | grep -E "Latest Current Version: <strong>[[:digit:]]+.[[:digit:]]+.[[:digit:]]+"|grep -oE "[[:digit:]]+.[[:digit:]]+.[[:digit:]]+"| head -n1) ; nodejs_url="https://nodejs.org/dist/v${latestCurrentNode}/node-v${latestCurrentNode}-linux-x64.tar.xz"; wget ${nodejs_url} ; filename=$(basename $nodejs_url); filefolder=$(echo $filename | sed 's|.tar.xz||g') ;