如何从网页下载某些文件的最新版本?

时间:2018-10-14 02:31:04

标签: bash curl sh wget

问题是:如何下载和列出仅包含部分内容的文件的最新版本:

1307*xenial_i386.deb 

文件名中的名称:

tvheadend-dbg_4.3-1307~g923b6bc1b~bionic_i386.deb 

来自链接: link

或者简单地下载具有最新日期的最新文件,其中包含:

 xenial_i386.deb 

文件名的一部分。 谢谢

1 个答案:

答案 0 :(得分:0)

由于过去我有类似的要求,所以我希望展示解决方案的某些部分。

定义下载URL和本地存储路径。

DOWNLOAD_URL="example.com/downloads/"
LOCAL_REPO="/opt/downloads/EXAMPLE/"

将整个下载页面放入一个变量。根据环境,包括代理连接和HTTP标头。

DOWNLOAD_URL_OUTPUT="$(curl --silent \
                       #    --proxy "http://${USER}:${PASS}@${PROXY}" \
                       #    --include \ 
                             -L0 https://${DOWNLOAD_URL}/ \
                            --write-out "\n%{http_code}")"

一些基本的错误处理可能会有所帮助。要检测我使用过的代理连接错误

if [[ ${#BASE_URL_OUTPUT} -lt 5 ]]; then 
  echo "No internet connection via" ${PROXY}
  echo "Output was:" ${BASE_URL_OUTPUT}
  exit
fi

也就是说,如果没有连接,页面为空等,则${BASE_URL_OUTPUT}将包含000。评估HTTP代码也是可能的。

比检查example-${VERSION}.rpm的最新版本(本地存储库可用)

LOCAL_LATEST=$(rpm --nosignature -qp ${LOCAL_REPO}/Packages/example-${VERSION}*.rpm --qf "%{VERSION}\n" | sort -uV | tail -1)
echo "Currently available local latest file version is" ${LOCAL_LATEST}

最新版本的example-${VERSION}.rpm也可以在下载页面上获得

DOWNLOAD_LATEST=$(echo "$DOWNLOAD_URL_OUTPUT" | grep -o "example-.*.noarch.rpm" | cut -d '"' -f 1 | sort -uV | tail -1)

现在,如果$ {{DOWNLOAD_LATEST}是新的或高于${LOCAL_LATEST},则可以进一步将版本号放入变量中,进行比较并开始下载。