Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1857422
  • 博文数量: 343
  • 博客积分: 10342
  • 博客等级: 上将
  • 技术积分: 2892
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 12:34
个人简介

你必须非常努力,才能看起来毫不费力!

文章存档

2012年(3)

2011年(5)

2010年(2)

2009年(40)

2008年(293)

分类: LINUX

2008-08-26 12:32:43

--------------------------------------------------------------------
[004目录结构]
--------------------------------------------------------------------
.
|-- book-2008-08-24
|-- check.sh
|-- download.sh
`-- readme

0 directories, 4 files

--------------------------------------------------------------------
[./readme]
--------------------------------------------------------------------
程序功能:
724本linux电子书的网址为ftp://202.96.64.144/pub/books/
本来用lftp可以用mirror命令直接下载books文件夹的,可惜下载第一个文件时会出现错误,停止着不能继续下载
用firefox的downthemall也会出现问题
于是想到写个bash脚本

使用说明:
1.download.sh
运行:./download.sh
功能:主下载程序
2.check.sh
运行:./check.sh
功能:检测下载情况与下载文件是否符合数目

建议:
修改脚本源代码,可实现单页面的文件下载

注意:
1.运行该程序前,请新建一文件夹,将check.sh和download.sh复制入内,再在该新建文件夹中运行。否则无法确保check.sh的正确运行
2.实际只能下载723个文件
其中<>手动下载也是失败
该ftp下的文件不一定都是724个,随着时间的推移会发生变化


--------------------------------------------------------------------
[./check.sh]
--------------------------------------------------------------------
#!/bin/sh

info="程序异常退出!"
infodir="info"
need_num=
finished_num=

if [ ! -e "$infodir"/index.html ] ; then
    echo "下载信息子目录$infodir下的index.html文件不存在"
    echo "$info"
    exit 1
fi

ls -p | grep "[^/]$" | sed -e '/check.sh/d' -e '/download.sh/d' > "$infodir"/downed_list

sed -n -e 's/^.*">\(.*\)<.*$/\1/pg' "$infodir"/index.html | sed -e 's/ / /g' -e 's/&/\&/g' > "$infodir"/need_to_down_name

sort "$infodir"/downed_list > "$infodir"/cmp-1
sort "$infodir"/need_to_down_name > "$infodir"/cmp-2
diff "$infodir"/cmp-1 "$infodir"/cmp-2

if [ $? -eq 0 ] ; then
    echo "下载完整"
fi

finished_num=`wc -l "$infodir"/downed_list | awk '{print $1;}'`
need_num=`wc -l "$infodir"/need_to_down_name | awk '{print $1;}'`
echo "已下载$finished_num个文件"
echo "需下载$need_num个文件"
#以下是无用的代码
#while read line
#do
#    i=$(($i+1))
#    cat downed_list | grep "$line"
#    if [ $? -ne 0 ] ; then
#    echo "$i:    $line" >> lost
#    fi
#done < $filename

--------------------------------------------------------------------
[./download.sh]
--------------------------------------------------------------------
#!/bin/sh

infodir="info"

if [ -e "$infodir" ] ; then
    rm -R "$infodir"
    echo "删除下载信息子目录$infodir"
fi

mkdir "$infodir"
wget ftp://202.96.64.144/pub/books/
mv index.html "$infodir"/
sed -n -e 's/^.*\(ftp.*\)">.*$/\1/pg' "$infodir"/index.html | sed -e 's/%20/%2520/g' -e 's/ /%20/g' -e 's/&/\&/g' -e 's/\[/%5B/g' -e 's/\]/%5D/g' -e 's/#/%23/g' > "$infodir"/list
wget -i "$infodir"/list
echo "下载完成!"
阅读(1200) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~