【问题标题】:How to download the most recent version of some file from web page?如何从网页下载某些文件的最新版本?
【发布时间】:2019-03-18 20:00:26
【问题描述】:

问题是:如何下载并列出例如包含部分的文件的最新版本:

1307*xenial_i386.deb 

文件名中的名称:

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

来自链接: link

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

 xenial_i386.deb 

文件名中的一部分。 谢谢

【问题讨论】:

  • 取决于 Web 服务器的配置方式。如果允许目录列表,那么很容易。如果没有,那就更难了,除非有“当前版本”的规范链接
  • 对不起,我没有确定链接。我更新了我的帖子!
  • 您需要抓取页面、解析内容、查找日期、比较并跟踪最新信息。我很无聊,所以我想我可以想出一个粗略的黑客...给我一些...
  • 您指定了 bash,我在 PHP 中完成了它……从命令行开始工作。 termbin.com/osbj 的脚本输出示例termbin.com/om5h 在重复时间戳的情况下(2018 年 10 月 13 日有一些),它会保留找到的第一个。
  • 这就是我留下评论而不是答案的原因。这不是一个代码编写服务,只要对我给你的内容做更多的工作和修改,你就可以做到。给一个人生火,让他在晚上保持温暖。让一个人着火,让他在余生中保持温暖。 :)

标签: bash curl sh wget


【解决方案1】:

由于我过去有类似的要求,因此我想展示我的解决方案的某些部分。

定义下载 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} 更新或更高时启动下载。

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2014-03-22
    • 2012-03-29
    • 2014-07-27
    • 2011-05-12
    • 1970-01-01
    相关资源
    最近更新 更多