返回列表 发新帖

down_part.sh

[复制链接]

6

主题

11

帖子

576

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
576

优秀版主荣誉管理论坛元老

发表于 2019-12-3 16:44:23 | 显示全部楼层 | 阅读模式
  1. #!/bin/sh
  2. part_bytes=$((1024 * 1024 * 1024))

  3. USAGE() {
  4. echo -e "usage: $0 [options] <url>

  5. options:
  6.     -o <str>  the prefix of output
  7.     -s        run curl on silent mode
  8.     -b <int>  the bytes of each part[default: $part_bytes]
  9.     -I        only show the total length of resource
  10.     -n <int>  only download the specific part

  11. example:
  12.     $0 -b \$((1024*1024*512)) [url]http://hgdownload.cse.ucsc.edu/goldenPath/rn6/bigZips/rn6.fa.gz[/url]

  13. contact: [email]suqingdong@novogene.com[/email]"

  14. exit
  15. }


  16. while getopts "ho:sb:In:" opt;do

  17.     case $opt in
  18.         o)
  19.             output="$OPTARG"
  20.             ;;
  21.         s)
  22.             silent='-s'
  23.             ;;
  24.         b)
  25.             part_bytes="$OPTARG"
  26.             ;;
  27.         h)
  28.             USAGE
  29.             ;;
  30.         I)
  31.             header_only=true
  32.             ;;
  33.         n)
  34.             part="$OPTARG"
  35.             ;;
  36.         ?)
  37.             exit 1
  38.             ;;
  39.     esac
  40. done

  41. #
  42. shift $(( $OPTIND - 1 ))

  43. [ ! $1 ] && USAGE

  44. url="$1"
  45. name=`basename $url`
  46. length=`curl -sIL $url | grep 'Content-Length' | tail -1 | grep -oP '\d+'`

  47. [ ! $output ] && output=$name

  48. echo "================================================================"
  49. echo "resource url : ${url}"
  50. mb=$(python -c "print round($length / 1024. / 1024, 2)")
  51. echo "total bytes  : ${length} (${mb}M)"
  52. echo "output name  : ${name}"
  53. echo "================================================================"

  54. [ $header_only ] && exit

  55. if [ $part_bytes -ge $length ];then
  56.     echo ">>> downloading $name directly ..."
  57.     curl -L $silent $url -o $output
  58. else
  59.     n=0
  60.     for fr in `seq 0 ${part_bytes} ${length}`;do
  61.         (( n++ ))
  62.         to=$(( $fr + $part_bytes - 1 ))
  63.         if [ $part ];then
  64.             if [ $part -eq $n ];then
  65.                 echo ">>> downloading part $n ..."
  66.                 curl $silent -r $fr-$to $url -o $output.part.$n
  67.                 break
  68.             else
  69.                 continue
  70.             fi
  71.         fi
  72.         echo ">>> downloading part $n ..."
  73.         curl -L $silent -r $fr-$to $url -o $output.part.$n
  74.     done
  75. fi

复制代码


发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则