|
在gentoo中可以通过make.conf进行如下的定义使用axel来下载需要的文件,这通常会比使用wget快4到5倍的时间:
- FETCHCOMMAND="/usr/bin/axel -a -o /\${DISTDIR}/${FILE} \${URI}"
- RESUMECOMMAND="/usr/bin/axel -a -o /\${DISTDIR}/${FILE} \${URI}"
复制代码
但是在ubuntu中,似乎没有提供这样的接口可以修改apt-get让它使用axel来下载文件,在有些国外的服务器上下载文件的时候就会很惨。其实和 Gentoo一样,apt-get也会检查目的路径中是否已经存在了同一个文件,如果存在了就不会再下载,而且apt-get也提供了不下载只打印下载地址的功能,结合这两个特点我们可以写出让apt-get使用axel的脚本。基本的原理就是,先调用apt-get --print-uris打印出要下载的文件,使用axel将这些文件下载到相应的目录,然后再执行正常的apt-get命令。
脚本的内容如下所示:
- #!/bin/bash
- # by cnwesleywang@gmail.com
- # http://www.wesleywang.net
- GOOD=$'\e[32;01m'
- WARN=$'\e[33;01m'
- BAD=$'\e[31;01m'
- HILITE=$'\e[36;01m'
- BRACKET=$'\e[34;01m'
- NORMAL=$'\e[0m'
- Usage="${BAD}Try something like${NORMAL} "$0 install stardict""
- if [ "$#" -lt 2 ] ; then
- echo "$Usage";
- exit 1;
- fi
- cmdout=`apt-get $* -y --print-uris`
- if [ $? -ne 0 ] ; then
- echo "${BAD}The command you input return fail,check it:$*${NORMAL}"
- exit 1;
- fi
- urls=`echo $cmdout | grep -e "http[:/a-zA-Z0-9._-]*.deb" -o`
- for aurl in $urls
- do
- echo "${HILITE}Trying to download${NORMAL} $aurl"
- cd /var/cache/apt/archives && axel $aurl
- if [ $? -ne 0 ] ; then
- echo "${BAD}Download $aurl fail,Skip!${NORMAL}"
- fi
- done
- echo "${HILITE}Now execute the normal apt-get command!${NORMAL}"
- apt-get $*
复制代码
使用方法举例:
- sudo ./axelaptget install stardict
复制代码
在这里下载脚本:http://www.wesleywang.net/sav/axelaptget |
|