一个下载723本linux电子书的bash脚本(测试通过)

一个下载723本linux电子书的bash脚本(测试通过)

--------------------------------------------------------------------
[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个文件
其中<<Red Hat; The Complete Reference Enterprise Linux & Fedo…​Edition (mcgraw-hill).rar>>手动下载也是失败
该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/&#32;/ /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/&#32;/%20/g' -e 's/&/\&/g' -e 's/\[/%5B/g' -e 's/\]/%5D/g' -e 's/#/%23/g' > "$infodir"/list
wget -i "$infodir"/list
echo "下载完成!"

      
不错       
引用:
原帖由 dearvoid 于 2008-8-23 18:44 发表
不错
谢谢,很开心
刚入门,写点小程序自娱自乐,有些东西可能会帮到大家,和大家分享      
我要对自己的代码负责,更新脚本,发现的不好的代码被换掉了
加油