wget参数详解

wget参数详解(包含例子)

官方文档:https://www.gnu.org/software/wget/manual/wget.html

快速使用: https://moneyslow.com/html/kevincox.ca/2022/12/21/wget-mirror/index.html

其他解释: https://moneyslow.com/html/fygul.blogspot.com/2020/05/wget.html

解决下载 403:

wget -U "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" https://moneyslow.com/a.jpg

解决中文文件名乱码:

可以将以下参填入 ~/.wgetrc 配置文件:

# 不要乱转义中文
--restrict-file-names=nocontrol
# 使用重定向后的文件名
--trust-server-names=on
--content-disposition=on
  • 启动
    -V, –version 显示wget的版本后退出
    -h, –help 打印语法帮助
    -b, –background 启动后转入后台执行
    -e, –execute=COMMAND 执行`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc
  • 记录和输入文件
    -o, –output-file=FILE 把记录写到FILE文件中
    -a, –append-output=FILE 把记录追加到FILE文件中
    -d, –debug 打印调试输出
    -q, –quiet 安静模式(没有输出)
    -v, –verbose 冗长模式(这是缺省设置)
    -nv, –non-verbose 关掉冗长模式,但不是安静模式
    -i, –input-file=FILE 下载在FILE文件中出现的URLs
    -F, –force-html 把输入文件当作HTML格式文件对待
    -B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
    –sslcertfile=FILE 可选客户端证书
    –sslcertkey=KEYFILE 可选客户端证书的KEYFILE
    –egd-file=FILE 指定EGD socket的文件名
  • 下载
    –bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
    -t, –tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
    -O –output-document=FILE 把文档写到FILE文件中
    -nc, –no-clobber 不要覆盖存在的文件或使用.#前缀
    -c, –continue 接着下载没下载完的文件
    –progress=TYPE 设定进程条标记
    -N, –timestamping 不要重新下载文件除非比本地文件新
    -S, –server-response 打印服务器的回应
    –spider 不下载任何东西
    -T, –timeout=SECONDS 设定响应超时的秒数
    -w, –wait=SECONDS 两次尝试之间间隔SECONDS秒
    –waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
    –random-wait 在下载之间等待0…2*WAIT秒
    -Y, –proxy=on/off 打开或关闭代理
    -Q, –quota=NUMBER 设置下载的容量限制
    –limit-rate=RATE 限定下载输率
  • 目录
    -nd –no-directories 不创建目录
    -x, –force-directories 强制创建目录
    -nH, –no-host-directories 不创建主机目录
    -P, –directory-prefix=PREFIX 将文件保存到目录 PREFIX/…
    –cut-dirs=NUMBER 忽略 NUMBER层远程目录
  • HTTP 选项
    –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文件中
  • FTP 选项
    -nr, –dont-remove-listing 不移走 `.listing’文件
    -g, –glob=on/off 打开或关闭文件名的 globbing机制
    –passive-ftp 使用被动传输模式 (缺省值).
    –active-ftp 使用主动传输模式
    –retr-symlinks 在递归的时候,将链接指向文件(而不是目录)
  • 递归下载
    -r, –recursive 递归下载--慎用!
    -l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷).
    –delete-after 在现在完毕后局部删除文件
    -k, –convert-links 转换非相对链接为相对链接
    -K, –backup-converted 在转换文件X之前,将之备份为 X.orig
    -m, –mirror 等价于 -r -N -l inf -nr.
    -p, –page-requisites 下载显示HTML文件的所有图片
  • 递归下载中的包含和不包含(accept/reject)
    -A, –accept=LIST 分号分隔的被接受扩展名的列表
    -R, –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做站点镜像:
    wget -r -p -np -k http://dsec.pku.edu.cn/~usr_name/
    或者
    wget -m http://dsec.pku.edu.cn/~usr_name/
  • 在不稳定的网络上下载一个部分下载的文件,以及在空闲时段下载
    wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC.avi -o down.log &
    或者从filelist读入要下载的文件列表
    wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linuxsoft -i filelist.txt -o down.log &
    上面的代码还可以用来在网络比较空闲的时段进行下载。我的用法是:在mozilla中将不方便当时下载的URL链接拷贝到内存中然后粘贴到文件filelist.txt中,在晚上要出去系统前执行上面代码的第二条。
  • 使用代理下载
    wget -Y on -p -k https://sourceforge.net/projects/wvware/
    代理可以在环境变量或wgetrc文件中设定
    在环境变量中设定代理
    export PROXY=http://211.90.168.94:8080/
    在~/.wgetrc中设定代理
    http_proxy = http://moneyslow.com:18023/
    ftp_proxy = http://moneyslow.com:18023/
  • 下载并以不同的文件名保存
    wget -O wordpress.zip http://moneyslow.com/download.aspx?id=1080
  • wget限速下载
    wget –limit-rate=300k http://moneyslow.com/testfile.zip
    当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。
  • 使用wget断点续传
    wget -c http://moneyslow.com/testfile.zip
    使用wget -c重新启动下载中断的文件,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。
  • 下载整个http或者ftp站点。
    wget http://moneyslow.com/here
    这个命令可以将http://moneyslow.com/here 首页下载下来。使用-x会强制建立服务器上一模一样的目录,如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录。
    wget -r http://moneyslow.com/here
    这个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。
    要是您想制作镜像站点,那么可以使用-m参数,例如:
    wget -m http://moneyslow.com/here
    这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robots.txt并按robots.txt的规定来执行。
  • 批量下载。
    如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件download.txt,然后用命令:
    wget -i download.txt
    这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)
  • 选择性的下载。
    可以指定让wget只下载一类文件,或者不下载什么文件。例如:
    wget -m –reject=gif http://moneyslow.com/subdirectory
    表示下载http://moneyslow.com/subdirectory,但是忽略gif文件。–accept=LIST 可以接受的文件类型,–reject=LIST拒绝接受的文件类型。
  • 密码和认证。
    wget只能处理利用用户名/密码方式限制访问的网站,可以利用两个参数:
    –http-user=USER设置HTTP用户
    –http-passwd=PASS设置HTTP密码
    对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl。
  • 伪装代理名称下载
    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://moneyslow.com/testfile.zip
    有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过–user-agent参数伪装。
  • 利用代理服务器进行下载。
    如果用户的网络需要经过代理服务器,那么可以让wget通过代理服务器进行文件的下载。此时需要在当前用户的目录下创建一个.wgetrc文件。文件中可以设置代理服务器:
    http-proxy = 111.111.111.111:8080
    ftp-proxy = 111.111.111.111:8080
    分别表示http的代理服务器和ftp的代理服务器。如果代理服务器需要密码则使用:
    –proxy-user=USER设置代理用户
    –proxy-passwd=PASS设置代理密码
    这两个参数。
    使用参数–proxy=on/off 使用或者关闭代理。
  • 测试下载链接
    当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以增加–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参数: 定时下载之前进行检查 间隔检测网站是否可用 检查网站页面的死链接
  • 增加重试次数
    wget –tries=40 URL
    如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要,你可以使用–tries增加重试次数。
  • 下载多个文件
    wget -i filelist.txt
    首先,保存一份下载链接文件:
    cat > filelist.txt
    url1
    url2
    url3
    url4
    接着使用这个文件和参数-i下载。
  • 镜像网站
    wget –mirror -p –convert-links -P ./LOCAL URL
    下载整个网站到本地。
    –miror开户镜像下载。
    -p下载所有为了html页面显示正常的文件。
    –convert-links下载后,转换成本地的链接。
    -P ./LOCAL保存所有文件和目录到本地指定目录。
  • 过滤指定格式下载
    wget –reject=gif ur
    下载一个网站,但你不希望下载图片,可以使用这条命令。
  • 把下载信息存入日志文件
    wget -o download.log URL
    不希望下载信息直接显示在终端而是在一个日志文件,可以使用。
  • 限制总下载文件大小
    wget -Q5m -i filelist.txt
    当你想要下载的文件超过5M而退出下载,你可以使用。注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。
  • 限制总下载文件大小
    wget -Q5m -i filelist.txt
    当你想要下载的文件超过5M而退出下载,你可以使用。注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。
  • 下载指定格式文件
    wget -r -A.pdf url
    可以在以下情况使用该功能:
    下载一个网站的所有图片。
    下载一个网站的所有视频。
    下载一个网站的所有PDF文件。
  • FTP下载
    wget ftp-url wget –ftp-user=USERNAME –ftp-password=PASSWORD url
    可以使用wget来完成ftp链接的下载。
    使用wget匿名ftp下载:
    wget ftp-url
    使用wget用户名和密码认证的ftp下载:
    wget –ftp-user=USERNAME –ftp-password=PASSWORD url