镜像一个http网站,排除某些文件。

9
我希望镜像一个简单的密码保护的 web-portal,以便将我想要保持镜像和最新状态的数据镜像。 实际上,这个网站只是一个目录列表,数据组织成文件夹,我不在意保留 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) [text/html]
正在保存至: `web.server.org/folder/index.html' 100%[======================================================================================================================>] 2,677 --.-K/s in 0s

缺少Last-modified标头——时间戳关闭。
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需要授权”错误,尽管已提供用户名和密码。就像wget在每次尝试用户名/密码之前都会尝试未经身份验证的连接一样。
谢谢,马克

请参考这个(重复的)问题的解决方案,了解如何修改wget:https://dev59.com/questions/PGcs5IYBdhLWcg3wmlWk - taranaki
4个回答

6
Pavuk(http://www.pavuk.org)看起来是一个不错的选择,它可以让你镜像网站,根据url模式和文件名扩展名排除文件...但 pavuk 0.9.35 在长时间传输过程中会随机断开并停止工作,并且似乎没有得到积极开发(此版本于2008年11月构建)。
FYI,这是我使用它的方法:
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通配符不跨越'/',因此您需要非常具体地形成查询,以避免下载整个文件夹。

马克


5
参数 --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手册中阅读详细说明 - mklingn
3
手册中并没有明确提到,但是使用--reject-regex选项可以省略整个目录(例如,使用wget --mirror --reject-regex '.*forum.*' https://site.xz命令可以拒绝/删除https://site.xz/forum下的所有内容)。 - mklingn

1

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

SERVER
    |-logs
    |-etc
    |-cache
    |-public_html
      |-images
      |-videos (希望排除)
      |-files
      |-audio  (希望排除)

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


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接