Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5361800
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类: LINUX

2007-04-01 08:19:29

下面是代码:(转自CU)
(俺是新手,高手见笑)

用法:./mycurl url


#!/bin/bash
######################################################################################################
#
# Script for curl to support resumable multi-part download.
#

url=$1
exename=`basename $0`

# How many "parts" will the target file be divided into?
declare -i parts=5

read -ep "Please input the target directory: " targetdir
read -ep "Please input the outfile name: " outfile

[ -z "$targetdir" ] && targetdir="./"
cd $targetdir||exit 2

[ -z "$outfile" ] && outfile=`basename $1`

length=`curl -s -I $url|grep Content-Length|sed s/[^0-9]//g`
#length=`curl -s -I $url|grep Content-Length|awk '{print $2}'|sed s/[^0-9]//`
if [ -z "$length" ]; then
        echo "cann't get the length of the target file"
        exit 1
fi
let "length = $length"

declare -i lsession=$(($length/$parts))
finished="false"

while true;
do

declare -i curr=0

for (( i=1; i<=parts; i=i+1 ))
do

#To get how many bytes have been downloaded
        if [ -e $outfile$i ]; then
                offset=`ls -l $outfile$i|awk '{print $5}'`
        else offset=0
        fi
        let "offset = $offset"

        if [ $i -lt $parts ]; then
                if [ $offset -lt $lsession ]; then       
                        curl -r $(($curr+$offset))-$(($curr+$lsession-1)) $url >> $outfile$i &
                fi
        else
                if [ $offset -lt $(($length-$(($lsession*$(($parts-1)))))) ]; then
                        curl -r $(($curr+$offset))- $url >> $outfile$i &
                fi
        fi
               
        curr=$(($curr+$lsession))                       

done


#To judge if all curl threads have terminated.
while true;
do
        hasCurl=`ps -A -o ppid,cmd|grep $$|grep -v "$exename"|grep -v "grep"|grep curl`
        [ -z "$hasCurl" ] && break
        sleep 10
done

finished="true"
for (( i=1; i<=$parts; i=i+1 ))
do
        if [ -e $outfile$i ]; then
                offset=`ls -l $outfile$i|awk '{print $5}'`
        else offset=0
        fi               
        let "offset = $offset"
        if [ $i -lt $parts ]; then
                if [ $offset -lt $lsession ]; then
                        finished="false"
                        break
                fi
        else
                if [ $offset -lt $(($length-$(($lsession*$(($parts-1)))))) ]; then  
                        finished="false"
                        break
                fi
        fi
done

        if [ "$finished" == "true" ]; then
                break
        fi
done

echo "All parts have been downloaded. Merging..."

mv --backup=t $outfile"1" $outfile
for (( i=2; i<=$parts; i=i+1))
do
        cat $outfile$i >> $outfile
        rm $outfile$i
done

echo "Done."

阅读(2947) | 评论(0) | 转发(0) |
0

上一篇:install-uvscan

下一篇:maildrop规则

给主人留下些什么吧!~~