--------------------------------------------------------------------
[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) |