wget递归下载,但我不想遵循所有链接


10

我正在尝试使用wget镜像网站,但是我不想下载很多文件,因此我正在使用wget的--reject选项来不保存所有文件。但是,wget仍将下载所有文件,然后在与我的拒绝选项匹配时将其删除。

如果它们匹配某些外壳通配符,是否有某种方法告诉wget不要遵循某些链接?如果wget无法执行此操作,是否还有其他常见的Linux命令可以执行此操作?


3
请发布您的整个命令。它使故障排除变得更加容易。
约瑟夫·科恩

Answers:


9

您还可以尝试HTTrack,它具有IMO,更加灵活和直观的包含/排除逻辑。像这样

httrack "https://example.com" -O ExampleMirrorDirectory \
"-*" \
"+https://example.com/images/*" \
"-*.swf"

规则将按顺序应用,并将覆盖以前的规则...

  1. 排除一切
  2. 但包括https://example.com/images/ *
  3. 但排除以swf结尾的任何内容

它会下载具有更新URL的CSS,图像等吗?
brandizzi 2011年


1

在'man wget'的--reject部分下:

“请注意,如果任何通配符*,?,[或]出现在acclist或rejlist的元素中,它将被视为一种模式,而不是后缀。”

如果执行此操作,则可能需要举例说明您正在使用的模式以及您认为应该匹配的模式,而事实并非如此。您说它们匹配,但是确定吗?

另外,请确保将此列表放在引号中,以便在将参数传递给wget之前,shell不会扩展那些通配符。

即使您的系统没有版本1.12,也请在此处阅读手册的“文件类型”部分。根据更改日志,维护人员添加了一些警告:

* NEWS: Added documentation change re: --no-parents, and various
caveats on accept/reject lists behavior. Rearranged some items in
order of priority.

--reject选项用引号引起来。我可以看到匹配正确的文件,因为下载文件后,wget删除了该文件。我只想停止它开始下载文件
Rory

这些是htm(l)文件吗?根据手册,这些内容无论如何都可以下载。
凯尔·布​​兰特

是。我要拒绝的文件是HTML文件。我知道无论如何都可以下载它们。有什么办法可以防止这种情况?
罗里

1

-l NUMBER如果有帮助,您可以使用该选项限制递归级别(不遵循某些正则表达式模式)。

级别为“ 2”会下载index.html,其子站点/图像/等以及子站点上的链接。


不,在这种情况下无济于事
Rory

1

您如何使用wget?尝试以这种方式使用它:

wget -r --reject=gif,jpg,swf http://norc.aut.ac.ir/

此命令将忽略gif,jpg和swf文件。


Rory McCann想要拒绝的文件是HTML文件,但是他想保留其他HTML文件,因此此语法不适用于他的问题。
罗伊斯·威廉姆斯

1

一种解决方法是通过代理服务器运行wget。将您的代理设置为禁止某些模式。这将阻止wget首先下载它们。

wget将下载并删除与-R模式匹配的文件。它也可以匹配模式,而不仅仅是扩展名或文件名的一部分。但是,它不会阻止wget先下载然后再删除。

httrack确实具有一些不错的功能,但是以我的经验,它保存“文件”的方式可能有点古怪,例如,如果httrack遇到index.asp?Type = BASIC&PAGEID = 2234234
它可以保存它,但是您必须告诉它保存该文件。查询的一部分,
例如%h%p /%n%[TYPE:@TYPE = ::]%[PAGEID:PAGEID = ::]。%t
@是问号的占位符,您可以稍后重命名文件,还是逃避问号?问题是,。%t会在您的URI的末尾添加一个“ .html”,而该URL最初没有“ .html”。如果您将其删除,httrack下载的图像将缺少文件扩展名。

更好地使用wget恕我直言

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.