我想编写一个bash脚本,下载并安装程序(RStudio)的最新日常构建版本。是否可以让wget
仅下载目录http://www.rstudio.org/download/daily/desktop/中的最新文件?
我想编写一个bash脚本,下载并安装程序(RStudio)的最新日常构建版本。是否可以让wget
仅下载目录http://www.rstudio.org/download/daily/desktop/中的最新文件?
#!/bin/bash
wget -q -O tmp.html http://www.rstudio.org/download/daily/desktop/ubuntu64/
RELEASE_URL=`cat tmp.html | grep -m 1 -o -E "https[^<>]*?amd64.deb" | head -1`
rm tmp.html
# TODO Check if the old package name is the same as in RELEASE_URL.
# If not, then get the new version.
wget -q $RELEASE_URL
#!/bin/bash
MY_PATH=`dirname "$0"`
RES_DIR="$MY_PATH/res"
# Piping from stdout suggested by Chirlo.
RELEASE_URL=`wget -q -O - http://www.rstudio.org/download/daily/desktop/ubuntu64/ | grep -m 1 -o "https[^\']*"`
if [ "$RELEASE_URL" == "" ]; then
echo "Package index not found. Maybe the server is down?"
exit 1
fi
mkdir -p "$RES_DIR"
NEW_PACKAGE=${RELEASE_URL##https*/}
OLD_PACKAGE=`ls "$RES_DIR"`
if [ "$OLD_PACKAGE" == "" ] || [ "$OLD_PACKAGE" != "$NEW_PACKAGE" ]; then
cd "$RES_DIR"
rm -f $OLD_PACKAGE
echo "New version found. Downloading..."
wget -q $RELEASE_URL
if [ ! -e "$NEW_PACKAGE" ]; then
echo "Package not found."
exit 1
fi
echo "Installing..."
sudo dpkg -i $NEW_PACKAGE
else
echo "rstudio up to date."
fi
还有一些评论:
res/
目录,其中包含最新版本(仅有一个文件),并将其名称与新抓取的软件包名称进行比较。这种方法不太规范(有一个文件并不意味着它曾经成功安装过)。更好的方法是解析dpkg -l
的输出结果,但是软件包的名称可能会与抓取的名称略有不同。sudo
的密码,所以它不是100%自动化的。有几种方法可以避免这个问题,但如果没有监督,你可能会遇到上述问题。RELEASE_URL=$(wget -q -O - http://www.rstudio.org/download/daily/desktop/ubuntu64 | grep -o -m 1 "https[^\']*" )
# check version from name ...
wget ${RELEASE_URL}
-N
选项告诉 wget 只有在文件是更新版本时才获取它。但是,仅使用 wget,您无法像下载某个远程目录中的所有文件的最新文件那样执行操作。您需要编写一个 bash 脚本或其他脚本来执行检查,然后调用 wget 抓取它。