|
|
发表于 2006-10-18 17:16:52
|
显示全部楼层
wget -m ftp://www.site.org/directory/subdirectory
详情请看:wget下载使用详解(转) (0篇)
http://java.learndiary.com/disDiaryContentAction.do?goalID=2368
转在这里:
JAVA学习日记:分享 您有JAVA学习目标吗? Google [ ] [搜索]
目标,分享快乐。 ( ) Web (*) learndiary.com
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
欢迎光临,guest。您上次访问的时间是: 2006-10-18 16:59:37.0,您已发帖53篇。请登
录/忘记密码? 帐号管理 新用户注册
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 学习日记
网站改版,欢迎
光临指导工作
(0篇评论)
[2006-10-08
07:12:32.0]
2. 祝大家国
庆节和中秋节双
节快乐!祝学习
日记上线两周年
(1篇评论)
[2006-09-30
21:37:15.0]
3. 本站添加
帖子中上传文件
及图片功能 (3
篇评论)
[2006-06-09
23:51:17.0]
4. 调查:您
认为本站目前最
应增加的内容是 练功场实践: java程序设计 学习日记开源项目 英语
公告牌: 什么? (2篇评 练功场简介
论)
[2006-06-07
18:08:20.0]
5. 本站的私
人目标、日记支
持功能进入有奖
公开测试 (0篇
评论)
[2006-05-21
16:49:40.0]
6. 系统使用
及测试反馈 (37
篇评论)
[2005-10-25
09:51:56.0]
7. 回复网友
留言集(敬请您
提出宝贵意见和
建议) (26篇评
论)
[2004-09-28
21:18:46.0]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
所有目标 检索 您的目标 添加新目标 记下学习日记 留言板 公告牌 综合RSS订阅
(new) 关于本站 使用帮助 给我写信 下载
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
系统导航:所有目标>>检索>>检索日记列表>>日记:wget下载使用详解(转)
写作日记 目标:学习Linux 上一日记 下一日记
日记标题 wget下 浏览次 作者: 创建时间: 最近更新: 我要
载使用详解(转) 数: 131 littlebat 2006-08-15 2006-08-15 评论
17:21:10.0 17:21:10.0
┌─────────────────────────────────────┐
│ 内容 │
│转自http://linux.ccidnet.com/art/1101/20051128/628467_1.html │
│ │
│A。使用wget工具 │
│ │
│linux所以的主要版本都自带了wget这个下载工具. │
│ │
│bash$ wget http://place.your.url/here │
│ │
│它还能控制ftp来下载整个web站点的各级目录,当然,如果你不小心,可能会把整个网 │
│站以及其他和他做链接的网站全部下载下来. │
│ │
│bash$ wget -m http://target.web.site/subdirectory │
│ │
│由于这个工具具有很将的下载能力,所以可以在服务器上把它用作镜像网站的工具.让│
│它按照"robots.txt"的规定来执行. │
│有很多参数用来控制它如何正确地做镜像,可以限制链接的类型和下载文件的类型等 │
│等.例如:只下载有联系的链接并且忽略GIF图片: │
│ │
│bash$ wget -m -L --reject=gif http://target.web.site/subdirectory │
│ │
│wget也能够实现端点续传(-c参数),当然,这种操作是需要远程服务器支持的. │
│ │
│bash$ wget -c http://the.url.of/incomplete/file │
│ │
│可以把端点续传和镜像功能结合起来,这样可以在以前断过多次的情况下继续镜像一 │
│个有大量选择性文件的站点.如何自动实现这个目的我们在后面会讨论得更多. │
│如果你觉得下载时老是断线会影响你办公的话,你可以限制wget重试的次数. │
│bash$ wget -t 5 http://place.your.url/here │
│这样重试五次后就放弃了.用"-t inf"参数表示永远不放弃.不停地重试. │
│ │
│B.那对于代理服务该怎么办呢? │
│可以使用http代理的参数或者在.wgetrc配置文件里指定一个如何通过代理去下载的 │
│途径.但是有这么一个问题, │
│如果通过代理来进行端点续传的话可能会有几次失败.如果有一次通过代理下载的过 │
│程发生中断,那么代理服务器上缓存里保存是那个完整的 │
│文件拷贝.所以当你用"wget -c"来下载剩余部分的时候代理服务器查看它的缓存,并 │
│错误地认为你已经下载了整个文件.于是就发出了错误的信号. │
│这个时候你可以用添加一个特定的请求参数来促使代理服务器清除他们的缓存: │
│ │
│bash$ wget -c --header=" ragma: no-cache" http://place.your.url/here │
│ │
│这个"--header"参数能够以各种数字,各种方式添加。通过它我们可以更改 │
│web服务器或者代理服务器的某些属性。有些站点不提供外部连接的文件服务,只有 │
│通过同一个站点上其他的一些页面时内容 │
│才会被提交。这个时候你可以用加上"Referer:" │
│参数: │
│bash$ wget --header="Referer: http://coming.from.this/page" http:// │
│surfing.to.this/page │
│有些特殊的网站只支持某种特定的浏览器,这个时候可以用"User-Agent:"参数 │
│bash$ wget --header="User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows│
│NT; DigExt)" http://msie.only.url/here │
│ │
│ │
│C.那我怎么设定下载时间呢? │
│如果你需要在你的办公电脑上通过和其他同事共享的一个连接来下载一些很大的文件│
│,而且你希望你的同事不会因为网络速度的减慢而收到影响, │
│那你就应该尽量避开高峰时段。当然,不需要在办公室里等到所以人都走掉,也不需 │
│要在家里用完晚饭后还惦记着要上网下载一次。 │
│用at来就可以很好的定制工作时间: │
│bash$ at 2300 │
│warning: commands will be executed using /bin/sh │
│at> wget http://place.your.url/here │
│at> press Ctrl-D │
│这样,我们设定了下载工作在晚上11点进行。为了使这个安排能够正常进行,请确 │
│认atd这个后台程序正在运行。 │
│ │
│D.下载要花很多时间? │
│当你需要下载大量的数据,而且你又没有享有足够的带宽,这个时候你会经常发现在 │
│你安排的下载任务还没有完成,一天的工作却又要开始了。 │
│作为一个好同事,你只能停掉了这些任务,而开始另外的工作。然后你又需要反复地│
│重复使用"wget -c"来完成你的下载。这样肯定太繁琐了, │
│所以最好是用crontab来自动执行。创建一个纯文本文件,叫做"crontab.txt",包含 │
│下面的内容: │
│0 23 * * 1-5 wget -c -N http://place.your.url/here │
│0 6 * * 1-5 killall wget │
│这个crontab文件指定某些任务定期地执行。前五列声明是什么时候执行这个命令, │
│而每行的剩余部分则告诉crontab执行什么内容。 │
│前两列指定了每天一到晚上11点就开始用wget下载,一到早上6点就停止一切wget │
│下载。第三四列的*表示每个月的每一天都执行这个任务。第五列则指定了一个星期 │
│的哪几天来执行这个程序。 --"1-5"表示从星期一 │
│到星期五。 │
│ │
│这样在每个工作日的晚上11点,下载工作开始,到了上午的6点,任何的wget任务 │
│就被停掉了。你可以用下面的命令来执行crontab: │
│bash$ crontab crontab.txt │
│wget的这个"-N"参数将会检查目标文件的时间戳,如果匹配了,下载程序就会停止,│
│因为它说明整个文件已经下载完全了。 │
│用"crontab -r"可以删除这个计划安排。我已经多次采用这种方法,通过共享的电话│
│拨号来下载过很多的ISO镜像文件,还是 │
│比较实用的。 │
│ │
│E.如何下载动态变化的网页 │
│有些网页每天都要根据要求变化好几次.所以从技术上讲,目标不再是一个文件,它没 │
│有文件长度.因此"-c"这个参数也就失去了意义. │
│例如:一个PHP写的并且经常变动的linux周末新闻网页: │
│bash$ wget http://lwn.net/bigpage.php3 │
│ │
│我办公室里的网络条件经常很差,给我的下载带了很大的麻烦,所以我写了个简单的脚│
│本来检测动态页面是否已经完全更新了. │
│#!/bin/bash │
│ │
│#create it if absent │
│touch bigpage.php3 │
│ │
│#check if we got the whole thing │
│while ! grep -qi bigpage.php3 │
│do │
│rm -f bigpage.php3 │
│ │
│#download LWN in one big page │
│wget http://lwn.net/bigpage.php3 │
│ │
│done │
│这个脚本能够保证持续的下载该网页,直到网页里面出现了"",这就表示该文件已经完│
│全更新了. │
│ │
│ │
│ │
│F.对于ssl和Cookies怎么办? │
│如果你要通过ssl来上网,那么网站地址应该是以"https://"来开头的.在这样的情况 │
│下你就需要另外一种下载工具,叫做curl,它能够 │
│很容易获得.有些网站迫使网友在浏览的时候必须使用cookie.所以你必须从在网站上│
│得到的那个Cookie里面得到"Cookie:"这个参数.这样才 │
│能保证下载的参数正确.对于lynx和Mozilla的Cookie的文件格式,用下面的: │
│bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf("%s=%s;",$6,$7)}│
│) │
│就可以构造一个请求Cookie来下载http://www.nytimes.com上的内容.当然,你要已经│
│用这个浏览器在该网站上完成注册. │
│w3m使用了一种不同的,更小巧的Cookie文件格式: │
│bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf("%s=%s;",$2,$3)} )│
│现在就可以用这种方法来下载了: │
│bash$ wget --header="Cookie: $cookie" http://www.nytimes.com/reuters/ │
│technology/tech-tech-supercomput.html │
│或者用curl工具: │
│bash$ curl -v -b $cookie -o supercomp.html http://www.nytimes.com/reuters/│
│technology/tech-tech-supercomput.htm │
│ │
│G.如何建立地址列表? │
│到现在为止我们下载的都是单个文件或者是整个网站.有的时候我们需要下载某个网 │
│页上链接的大量文件,但没有必要把它整个网站 │
│都镜像下来.比如说我们想从一个依次排列的100首歌里面下载前20首.注意,这里 │
│"--accept"和"--reject"参数是不会 │
│起作用的,因为他们只对文件操作起作用.所以一定要用"lynx -dump"参数来代替. │
│bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print│
│$2} > urllist.txt │
│lynx的输出结果可以被各种GNU文本处理工具过虑.在上面的例子里,我们的链接地址 │
│是以"gz"结尾的,并且把最后10个文件地址放到 │
│urllist.txt文件里.然后我们可以写一个简单的bash脚本来自动下载这个文件里的目│
│标文件: │
│ │
│bash$ for x in $(cat urllist.txt) │
│> do │
│> wget $x │
│> done │
│这样我们就能够成功下载Linux Gazette网站(ftp://ftp.ssc.com/pub/lg/)上的最新│
│10个论题. │
│ │
│ │
│ │
│H.扩大使用的带宽 │
│如果你选择下载一个受带宽限制的文件,那你的下载会因为服务器端的限制而变得很 │
│慢.下面这个技巧会大大缩短下载的过程.但这个技巧 │
│需要你使用curl并且远程服务器有多个镜像可以供你下载.例如,假设你想从下面的三│
│个地址下载Mandrake 8.0: │
│url1=http://ftp.eecs.umich.edu/pub/linux/mandrake/iso/Mandrake80-inst.iso │
│url2=http://ftp.rpmfind.net/linux/Mandrake/iso/Mandrake80-inst.iso │
│url3=http://ftp.wayne.edu/linux/mandrake/iso/Mandrake80-inst.iso │
│这个文件的长度是677281792个字节,所以用curl程序加"--range"参数来建立三个同 │
│时进行的下载: │
│bash$ curl -r 0-199999999 -o mdk-iso.part1 $url1 & │
│bash$ curl -r 200000000-399999999 -o mdk-iso.part2 $url2 & │
│bash$ curl -r 400000000- -o mdk-iso.part3 $url3 & │
│这样就创建了三个后台进程.每个进程从不同的服务器传输这个ISO文件的不同部分. │
│这个"-r"参数指定目标文件的字节范围.当这三个 │
│进程结束后,用一个简单的cat命令来把这三个文件衔接起来-- cat mdk-iso.part? >│
│mdk-80.iso.(强烈建议在刻盘之前先检查md5) │
│你也可以用"--verbose"参数来使每个curl进程都有自己的窗口来显示传输的过程. │
│ │
│结束语 │
│不用担心使用非交互式的下载方式会影响你的下载效果.无论网站设计者如何绞尽脑 │
│汁想阻止我们从他们的网站下载,我们都可以得到 │
│免费的工具来自动完成下载任务.这会大大丰富我们的网络经历. │
├─────────────────────────────────────┤
│ 相关资源 │
│转自http://linux.ccidnet.com/art/1101/20051128/628467_1.html │
└─────────────────────────────────────┘
相关评论
上一日记 下一日记
[返回]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Copyright(c) 2004-2006 www.learndiary.com(学习日记). 保留部分权利
除原作者特别声明外,本站所有帖子以引用转载注明原始出处方式授权.
Powered by LearnDiary v0.9.0.4+ Code (c) 2004-2006 学习日记感谢您的惠顾,如有任
何建议和意见,请联系版主:mdx-xx at tom dot com。2004.7.25 |
|