【问题标题】:mirror http website, excluding certain files镜像http网站,不包括某些文件
【发布时间】:2012-05-23 01:29:12
【问题描述】:

我想将一个简单的受密码保护的门户网站镜像到我想保持镜像和最新的一些数据。本质上,这个网站只是一个目录列表,其中的数据被组织到文件夹中,我并不真正关心保留 html 文件和其他格式元素。 但是有一些巨大的文件类型太大而无法下载,所以我想忽略这些。

使用wget -m -R/--reject 标志几乎可以满足我的要求,除了下载所有文件,如果它们与 -R 标志匹配,则它们将被删除。

这是我使用wget的方式:

wget --http-user userName --http-password password -R index.html,*tiff,*bam,*bai -m http://web.server.org/

这会产生这样的输出,确认排除的文件 (index.html) (a) 被下载,然后 (b) 被删除:

...
--2012-05-23 09:38:38-- http://web.server.org/folder/
重用与 web.server.org:80 的现有连接。
HTTP 请求已发送,等待响应... 401 需要授权
重用与 web.server.org:80 的现有连接。
HTTP 请求已发送,正在等待响应... 200 OK
长度:2677 (2.6K) [文本/html]
保存到:`web.server.org/folder/index.html' 100%[================================================= ==================================================== =====================>] 2,677 --.-K/s in 0s

缺少上次修改的标头 -- 时间戳已关闭。
2012-05-23 09:38:39 (328 MB/s) - `web.server.org/folder/index.html' 已保存 [2677/2677]

删除 web.server.org/folder/index.html 因为它应该被拒绝。

...

有没有办法强制 wget 在下载文件之前拒绝它?
有没有我应该考虑的替代方案?

另外,尽管提供了用户名和密码,为什么我会为每个下载的文件收到 401 Authorization Required 错误。就像wget 在尝试用户名/密码之前每次都尝试未经身份验证的连接。

谢谢,马克

【问题讨论】:

标签: wget


【解决方案1】:

Pavuk (http://www.pavuk.org) 看起来像是一个很有前途的替代方案,它允许您镜像网站,不包括基于 url 模式和文件扩展名的文件...但是 pavuk 0.9.35 seg-faults/dies 在 long 中间随机转移和似乎没有积极开发(此版本是 2008 年 11 月构建的)。

仅供参考,我是这样使用它的:
pavuk -mode mirror -force_reget -preserve_time -progress -Robots -auth_scheme 3 -auth_name x -auth_passwd x -dsfx 'html,bam,bai,tiff,jpg' -dont_leave_site -remove_old -cdir /path/to/root -subdir /path/to/root -skip_url_pattern ’*icons*’ -skip_url_pattern '*styles*' -skip_url_pattern '*images*' -skip_url_pattern '*bam*' -skip_url_pattern '*solidstats*' http://web.server.org/folder 2>&1 | tee pavuk-date.log

最后,wget --exclude-directories 成功了:

wget --mirror --continue --progress=dot:mega --no-parent \
--no-host-directories --cut-dirs=1 \
--http-user x --http-password x \
--exclude-directories='folder/*/folder_containing_large_data*' --reject "index.html*" \
--directory-prefix /path/to/local/mirror
http://my.server.org/folder

由于--exclude-directories 通配符不跨越“/”,因此您需要非常具体地形成查询以避免下载整个文件夹。

标记

【讨论】:

    【解决方案2】:

    Parameter --reject 'pattern' 实际上使用 wget 1.14 为我工作。

    例如:

    wget --reject rpm http://somerpmmirror.org/site/
    

    根本没有下载所有*.rpm 文件,只有索引。

    警告:如果文件模式与位于工作目录中的文件匹配,则 bash 可能会无意中扩展文件模式。请使用引号来避免这种情况:

    touch blahblah.rpm
    # working
    wget -R '*.rpm' ....
    # working
    wget -R "*.rpm" ....
    # not working
    wget -R *.rpm ....
    

    【讨论】:

    • 事实上,在最近的版本中,--reject--reject-regex 不应下载匹配的文件htm(l) 以外的文件。阅读 wget 手册中的a detailed explanation
    • 手册中没有明确提及,但是使用--reject-regex可以省略整个目录(例如wget --mirror --reject-regex '.*forum.*' https://site.xz拒绝/删除site.xz/forum以下的任何内容)
    【解决方案3】:

    无法使用 wget:http://linuxgazette.net/160/misc/lg/how_to_make_wget_exclude_a_particular_link_when_mirroring.html

    不过,我不确定是否有新版本。

    关于 401 代码,不保留任何状态(cookie 不用于 HTTP 身份验证),因此每次请求都必须发送用户名和密码。 wget 尝试不带用户的请求并在诉诸它之前先通过。

    【讨论】:

      【解决方案4】:

      wget -X directory_to_exclude[,other_directory_to_exclude] -r ftp://URL_ftp_server

      服务器 |-日志 |-等 |-缓存 |-public_html |-图片 |-videos(想排除) |-文件 |-audio(想排除)

      wget -X /public_html/videos,/public_html/audio ftp:SERVER/public_html/*

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-04
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 2016-09-20
        • 2021-11-11
        • 1970-01-01
        相关资源
        最近更新 更多