问题是:如何下载和列出仅包含部分内容的文件的最新版本:
1307*xenial_i386.deb
文件名中的名称:
tvheadend-dbg_4.3-1307~g923b6bc1b~bionic_i386.deb
来自链接: link
或者简单地下载具有最新日期的最新文件,其中包含:
xenial_i386.deb
文件名的一部分。 谢谢
答案 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}
,则可以进一步将版本号放入变量中,进行比较并开始下载。