2014-10-06 85 views
0

我想从某个网址下载最新的软件源代码(WRF),然后自动执行安装过程。样本网址,如下所示给出: -如何使用wget从相同的URL下载最新版本的软件

http://www2.mmm.ucar.edu/wrf/src/WRFV3.6.1.TAR.gz

在上面的网址,版本号可以在开发者版本后更改不时新版本。现在我想从主脚本下载最新的可用版本。我尝试了以下内容: -

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 

但是,我无法去进一步从链接过滤出更高版本。

+0

'sort -V | tail -n 1' – tripleee 2014-10-06 14:45:03

+0

'wget -k -l 0“http://www2.mmm.ucar.edu/wrf/src/”-O index.html; cat index.html | grep -o'http:[^“] *。gz'| grep'WRFV'| sort -V | tail -n 1'会导致排序不同的文件,它给了我'http://www2.mmm.ucar.edu/wrf/src/WRFV3_OVERLAY_3.0.1.1.TAR.gz'这不是我想要的,而是我期望'http:// www2.mmm.ucar.edu/wrf/src/WRFV3.6.1.TAR.gz' – 2014-10-06 14:52:23

+0

它需要智能,对于正则表达式来说不是一个好工作,你需要有一个脚本并且不时地维护它 – HuStmpHrrr 2014-10-06 15:03:44

回答

0

通常,用于处理HTML的网页我recommendig一些Perl工具,但因为这是一个目录索引输出,(可能)可以通过bash的工具来完成像grepsed和这样...

下面的代码被分为几个较小的bash功能,对于简单的更改

#!/bin/bash 

#getdata - should output html source of the page 
getdata() { 
    #use wget with output to stdout or curl or fetch 
    curl -s "http://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>:\[email protected]\1:p' | grep "${1:-.}" 
} 

#sort_by_date - probably don't need comment... sorts the lines by date... ;) 
sort_by_date() { 
    while [email protected] 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 [email protected] -f2) 
echo "You want download: $file" 

打印

You want download: WRFV3-Chem-3.6.1.TAR.gz 
0

增加一个数字排序最前的行什么:

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

它很容易中断,如果维护者发布一个名为'WRFV4.TAR.gz'的新版本会怎么样? ? – HuStmpHrrr 2014-10-06 15:05:36

+0

这就是屏幕抓取的问题,你在网站更新的摆布。 – 2014-10-06 15:10:39

相关问题