shell 如何使用wget从同一个url下载最新版本的软件

gk7wooem  于 2023-08-07  发布在  Shell
关注(0)|答案(2)|浏览(164)

我想从一些网址下载软件(WRF)的最新源代码,并自动化安装过程之后。下面给出了一个示例URL:
http://www2.mmm.ucar.edu/wrf/src/WRFV3.6.1.TAR.gz
在上面的URL中,版本号可能会在开发人员发布新版本后不时更改。现在我想从主脚本下载最新的可用版本。我尝试了以下方法:

wget -k -l 0 "http://www2.mmm.ucar.edu/wrf/src/" -O index.html ; cat index.html | grep -o 'http:[^"]*.gz' | grep 'WRFV'

字符串
有了上面的代码,我可以拉所有可用的软件版本。上面代码的输出如下:

http://www2.mmm.ucar.edu/wrf/src/WRFV2.0.3.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV2.1.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV2.1.2.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV2.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV2.2.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV2.2.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.0.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.0.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.1.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.2.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.2.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.3.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.3.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.4.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.4.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.5.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.5.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.6.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Chem-3.6.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3-Var-do-not-use.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.0.1.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.0.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.1.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.2.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.2.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.2.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.3.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.3.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.4.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.4.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.5.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.5.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.6.1.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.6.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3.TAR.gz
http://www2.mmm.ucar.edu/wrf/src/WRFV3_OVERLAY_3.0.1.1.TAR.gz


但是,我无法进一步从链接中筛选出仅更新的版本。

gtlvzcf8

gtlvzcf81#

通常,对于处理html页面,我推荐一些perl工具,但因为这是一个 Directory Index 输出,(可能)可以通过像grepsed这样的bash工具来完成。
下面的代码被分成几个较小的bash函数,以便于修改

#!/bin/bash

#getdata - should output html source of the page
getdata() {
    #use wget with output to stdout or curl or fetch
    curl -s "https://www2.mmm.ucar.edu/wrf/src/"
    #cat index.html
}

#filer_rows - get the filename and the date columns
filter_rows() {
    sed -n 's:<tr><td.*href="\([^"]*\)">.*>\([0-9].*\)</td>.*</td>.*</td></tr>:\2@\1:p' | grep "${1:-.}"
}

#sort_by_date - probably don't need comment... sorts the lines by date... ;)
sort_by_date() {
    while IFS=@ read -r date file
    do
        echo "$(date --date="$date" +%s)@$file"
    done | sort -gr
}

#MAIN
file=$(getdata | filter_rows WRFV | sort_by_date | head -1 | cut -d@ -f2)
echo "You want download: $file"

字符串
印刷品

You want download: WRFV3.0.TAR.gz

axr492tv

axr492tv2#

添加一个数字排序并取最上面的一行怎么样:

wget -k -l 0 "https://www2.mmm.ucar.edu/wrf/src/" -O index.html ; cat index.html | grep -o 'https:[^"]*.gz' | grep 'WRFV[0-9]*[0-9]\.[0-9]'  | sort -r -n | head -1

字符串
显示更高版本号(按日期/时间不是最新版本):

https://www2.mmm.ucar.edu/wrf/src/WRFV4.0.TAR.gz

相关问题