Linux 命令之 wget -- 下载文件工具

一、命令介绍

wget 是在Linux下开发的开放源代码的软件,作者是 Hrvoje Niksic,后来被移植到包括 Windows 在内的各个平台上。

wget 命令用来从指定的 URL 下载文件。wget 非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget 会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

wget 支持 HTTP,HTTPS 和 FTP 协议,可以使用 HTTP 代理。所谓的自动下载是指,wget 可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个 wget 下载任务,然后退出系统,wget 将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。

没有指定目录,资源会默认下载到当前目录下。

wget 主要特点:

  1. 支持断点下传功能
    这一点,也是网络蚂蚁和 FlashGet 当年最大的卖点,现在,wget 也可以使用此功能,那些网络不是太好的用户可以放心了

  2. 同时支持 FTP 和 HTTP 下载方式
    尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件

  3. 支持代理服务器
    对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能

二、命令语法

wget [参数选项] <URL地址>

三、常用选项

选项 描述
-a --append-output<filename>
-o--output-file<filename> 把记录写到FILE文件中。例如,在指定的日志文件中记录命令的执行过程信息
-A<后缀名> 指定要下载文件的后缀名,多个后缀名之间使用逗号进行分隔。就是指定要下载的文件格式,例如,只下载图片、视频等。
-b--background wget 启动后转入后台执行
-B<URL>--base<URL> 将 URL 作为在 -F-i 参数指定的文件中出现的相对链接的前缀
-c--continue 接着下载没下载完的文件
-C<标志> 设置服务器数据块功能标志,on 为激活,off 为关闭,默认值为 on
-d 或 --debug 调试模式运行指令,会输出调试信息
-D<域名列表> 设置顺着的域名列表,域名之间用“,”分隔
-e<指令>--execute<command> 作为文件 .wgetrc 中的一部分执行指定的指令。即执行 .wgetrc 格式的命令,wgetrc 格式参见文件 /etc/wgetrc~/.wgetrc
-F--force-html 把输入文件当作HTML格式文件对待
-h--help 显示指令帮助信息
-i<filename>--input-file<filename> 从指定文件获取要下载的 URL 地址
-l<目录列表> 设置顺着的目录列表,多个目录用“,”分隔
-nc--no-clobber 不要覆盖存在的文件或使用 .# 前缀
-nv--non-verbose 关掉冗长模式,但不是安静模式。下载时只显示更新和出错信息,但不显示指令的详细执行过程
-q--quiet 安静模式,不输出命令相关的执行信息,即不显示指令执行过程
-nh 不查询主机名称
-v--verbose 冗长模式,即显示命令的详细执行过程,这是缺省的选项
-V--version 显示 wget 的版本信息后退出
--sslcertfile 可选客户端证书
--sslcertkey 可选客户端证书的KEYFILE
--egd-file 指定 EGD socket 的文件名
--bind-address 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t<number>--tries<number> 设定最大尝试链接次数(0 表示无限制)
-O--output-document<filename> 把文档写到 filename 文件中
--progress<type> 设定进程条标记
-N--timestamping 不要重新下载文件除非比本地文件新
-S--server-response 打印服务器的回应
--spider 不下载任何东西
-T<seconds>--timeout<seconds> 设定响应超时的秒数
-w<seconds>--wait<seconds> 两次尝试之间间隔的秒数
--waitretry<seconds> 在重新链接之间等待的秒数
--random-wait<seconds> 在下载之间等待的秒数
-Y--proxy<on/off> 打开或关闭代理
-Q<number>--quota<number> 设置下载的容量限制
--limit-rate<rate> 限定下载输率
-nd--no-directories 不创建目录。递归下载时不创建一层一层的目录,把所有的文件下载到当前目录;不指定该选项默认按照资源在站点位置创建相应目录
-x--force-directories 强制创建目录
-nH--no-host-directories 不创建主机目录
-P<PREFIX>--directory-prefix<PREFIX> 将文件保存到目录 PREFIX/…
--cut-dirs<NUMBER> 忽略 NUMBER 层远程目录
--http-user<USER> 设定 HTTP 用户名为 USER
--http-passwd<PASS> 设定 HTTP 密码为 PASS
-C--cache<on/off> 允许/不允许服务器端的数据缓存 (一般情况下允许)
-E--html-extension 将所有 text/html 文档以 .html 扩展名保存
--ignore-length 忽略 Content-Length 头域
--header<STRING> 在 headers 中插入字符串 STRING
--proxy-user<USER> 设定代理的用户名为 USER
--proxy-passwd<PASS> 设定代理的密码为 PASS
--referer<URL> 在 HTTP 请求中包含 Referer: URL
-s--save-headers 保存 HTTP 头到文件
-U--user-agent<AGENT> 设定代理的名称为 AGENT 而不是 Wget/VERSION
--no-http-keep-alive 关闭 HTTP 活动链接 (永远链接)
--cookies<off> 不使用 cookies
--load-cookies<FILE> 在开始会话前从文件 FILE 中加载 cookie
--save-cookies<FILE> 在会话结束后将 cookies 保存到 FILE 文件中
-nr--dont-remove-listing 不移走 .listing 文件
-g--glob<on/off> 打开或关闭文件名的 globbing 机制
--passive-ftp 使用被动模式PASV连接FTP服务器,使用被动传输模式 (缺省值)
--active-ftp 使用主动传输模式
--retr-symlinks 在递归的时候,将链接指向文件(而不是目录)
-r--recursive 递归下载(慎用!)
-l--level<NUMBER> 最大递归深度 (inf0 代表无穷)
--delete-after 在现在完毕后局部删除文件
-k--convert-links 转换非相对链接为相对链接
-K--backup-converted 在转换文件X之前,将之备份为 X.orig
-m--mirror 等价于 -r -N -l inf -nr,递归下载,递归深度无穷,但是不重新下载文件,除非比本地文件更新,不移走 .listing 文件
-p--page-requisites 下载所有用于显示 HTML 页面的图片之类的元素
-A<LIST>--accept<LIST> 分号分隔的被接受扩展名的列表
-R<LIST>--reject<LIST> 分号分隔的不被接受的扩展名的列表,排除要下载文件的后缀名,多个后缀名之间使用逗号进行分隔
-D--domains<LIST> 分号分隔的被接受域的列表
--exclude-domains<LIST> 分号分隔的不被接受的域的列表
--follow-ftp 跟踪HTML文档中的FTP链接
--follow-tags<LIST> 分号分隔的被跟踪的HTML标签的列表
-G--ignore-tags<LIST> 分号分隔的被忽略的HTML标签的列表
-H--span-hosts 当递归时转到外部主机
-L--relative 仅仅跟踪相对链接。递归时不进入其它主机。不指定该选项的话,如果站点包含了外部站点的链接,这样可能会导致下载内容无限大
-I--include-directories<LIST> 允许目录的列表
-X--exclude-directories<LIST> 不被包含目录的列表
-np--no-parent 不要追溯到父目录。递归下载时不搜索上层目录,只在指定的路径下进行下载。不指定该选项默认搜索整个站点
wget -S --spider url 不下载只显示过程

四、命令示例

(一)下载并以不同的文件名保存

wget -O wordpress.zip http://www.jsdig.com/download.aspx?id=1080

说明:

  1. -O 表示把文档写到文件 wordpress.zip 中,就是下载的内容存入文件 wordpress.zip 中
  2. 没有指定下载到的目录,默认保存在当前目录
  3. 在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)

(二)下载单个文件

wget http://www.jsdig.com/testfile.zip

(三)限速下载

wget --limit-rate=300k http://www.jsdig.com/testfile.zip

当你执行 wget 的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。

(四)断点续传

wget -c http://www.jsdig.com/testfile.zip

需要继续中断的下载时可以使用 -c 参数。对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。

(五)使用 wget 后台下载

wget -b http://www.jsdig.com/testfile.zip

Continuing in background, pid 1840.
Output will be written to `wget-log'.

对于下载非常大的文件的时候,我们可以使用参数 -b 进行后台下载,你可以使用以下命令来察看下载进度:

tail -f wget-log

(六)伪装代理名称下载

wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.jsdig.com/testfile.zip

有些网站会判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过 --user-agent 参数伪装。

(七)测试下载链接

当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以使用选项 --spider 进行检查。

wget --spider URL

如果下载链接正确将会显示如下信息:

Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.

这保证了下载能在预定的时间进行,如果你给错了一个链接,将会显示如下错误:

wget --spider url
Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response... 404 Not Found
Remote file does not exist -- broken link!!!

你可以在以下几种情况下使用 --spider 参数:

  1. 定时下载之前进行检查
  2. 间隔检测网站是否可用
  3. 检查网站页面的死链接

(八)增加重试连接的次数

wget --tries=40 URL

下载大文件或者网络不稳定时,经常会下载失败,而 wget 默认重试20次连接下载文件。如果需要,你可以使用 --tries 增加重试次数。

(九)下载多个文件

首先,你要将多个下载链接保存到一个文件中,然后使用选项 -i 指定该文件。

wget -i filelist.txt

(十)镜像网站,即下载整个网站

wget --mirror -p --convert-links -P ./LOCAL URL

说明:

  1. --mirror 开户镜像下载
  2. -p 下载所有为了 html 页面显示正常的文件
  3. --convert-links 下载后,转换成本地的链接
  4. -P 将所有文件和目录保存到指定的本地目录下

(十一)过滤指定格式下载

下载一个网站,但你不希望下载图片,可以使用这条命令:

wget --reject=gif url

(十二)把下载信息存入日志文件

不希望下载信息直接显示在终端而是在一个日志文件,可以使用这个命令:

wget -o download.log URL

(十三)限制下载文件的总大小

下载配额选项 -Q,用来指定下载数据配额,下载数据超过了指定配额会停止下载。

例如,当下载的文件的总大小超过 10M 则停止下载:

wget -Q 10m -i filelist.txt

如果不指定下载配额会下载文件 filelist.txt 所包含的所有 url,如果指定了下载配额为 10m,下载数据超过了 10m 会停止后面 url 的下载,但是,一个文件正在下载过程中下载数据超过了下载配额会继续完成该文件的下载不会立即停止下载。

注意,该选项对于单个文件下载无效,只适用于多文件下载或递归下载

(十四)下载指定格式的文件

只下载 pdf,png 格式的文件:

wget -r -A pdf,png url

通常在以下场景中,会使用该命令:

  1. 下载一个网站的所有图片。
  2. 下载一个网站的所有视频。
  3. 下载一个网站的所有PDF文件。

(十五)匿名 FTP 下载

wget ftp-url

(十六)用户名和密码认证的 FTP 下载

wget --ftp-user=USERNAME --ftp-password=PASSWORD url

(十七)用户名和密码认证的 HTTP 下载

wget --http-user=USER --http-password=PASS http://www.example.com/testfile.zip

对于需要证书做认证的网站,就只能利用其他下载工具了,例如 curl

猜你喜欢

转载自blog.csdn.net/liaowenxiong/article/details/117337527#comments_22386524