|
- #!/bin/sh
- part_bytes=$((1024 * 1024 * 1024))
- USAGE() {
- echo -e "usage: $0 [options] <url>
- options:
- -o <str> the prefix of output
- -s run curl on silent mode
- -b <int> the bytes of each part[default: $part_bytes]
- -I only show the total length of resource
- -n <int> only download the specific part
- example:
- $0 -b \$((1024*1024*512)) [url]http://hgdownload.cse.ucsc.edu/goldenPath/rn6/bigZips/rn6.fa.gz[/url]
- contact: [email]suqingdong@novogene.com[/email]"
- exit
- }
- while getopts "ho:sb:In:" opt;do
- case $opt in
- o)
- output="$OPTARG"
- ;;
- s)
- silent='-s'
- ;;
- b)
- part_bytes="$OPTARG"
- ;;
- h)
- USAGE
- ;;
- I)
- header_only=true
- ;;
- n)
- part="$OPTARG"
- ;;
- ?)
- exit 1
- ;;
- esac
- done
- #
- shift $(( $OPTIND - 1 ))
- [ ! $1 ] && USAGE
- url="$1"
- name=`basename $url`
- length=`curl -sIL $url | grep 'Content-Length' | tail -1 | grep -oP '\d+'`
- [ ! $output ] && output=$name
- echo "================================================================"
- echo "resource url : ${url}"
- mb=$(python -c "print round($length / 1024. / 1024, 2)")
- echo "total bytes : ${length} (${mb}M)"
- echo "output name : ${name}"
- echo "================================================================"
- [ $header_only ] && exit
- if [ $part_bytes -ge $length ];then
- echo ">>> downloading $name directly ..."
- curl -L $silent $url -o $output
- else
- n=0
- for fr in `seq 0 ${part_bytes} ${length}`;do
- (( n++ ))
- to=$(( $fr + $part_bytes - 1 ))
- if [ $part ];then
- if [ $part -eq $n ];then
- echo ">>> downloading part $n ..."
- curl $silent -r $fr-$to $url -o $output.part.$n
- break
- else
- continue
- fi
- fi
- echo ">>> downloading part $n ..."
- curl -L $silent -r $fr-$to $url -o $output.part.$n
- done
- fi
复制代码
|
|