我试图使用wget镜像网站,但我不想下载大量的文件,所以我使用wget的--reject
选项不保存所有的文件。 但是,wget仍然会下载所有文件,然后删除文件,如果它匹配我的拒绝选项。
有没有什么方法可以告诉wget不遵循某些链接,如果他们匹配一些shell通配符? 如果wget不能做到这一点,是否有一些其他常见的Linux命令可以做到这一点?
你也可以尝试HTTrack ,它具有IMO更灵活和直观的包含/排除逻辑。 像这样的东西…
httrack "https://example.com" -O ExampleMirrorDirectory \ "-*" \ "+https://example.com/images/*" \ "-*.swf"
规则将按顺序应用,并将覆盖以前的规则…
看起来这在wget中是不可能的
在“man wget”的–reject部分下:
“请注意,如果任何通配符,*,?,[或]出现在acclist或rejlist的元素中,它将被视为模式,而不是后缀。
如果你正在这样做,你可能想要给出你正在使用的模式的例子,你认为应该匹配什么,而事实并非如此。 你说他们是匹配的,但你确定吗?
此外,请确保将此列表放在引号中,所以在将parameter passing给wget之前,shell不会展开这些通配符。
即使您的系统没有版本1.12,请阅读本手册的“文件types”部分。 根据变更日志,维护人员添加了一些注意事项:
* NEWS: Added documentation change re: --no-parents, and various caveats on accept/reject lists behavior. Rearranged some items in order of priority.
你可以用-l NUMBER
选项限制recursion的级别,如果有帮助的话(不遵循某个正则expression式模式)。
级别为“2”的下载index.html,其子网站/图像/等和子网站上的链接。
你如何使用wget? 尝试以这种方式使用它:
wget -r --reject=gif,jpg,swf http://norc.aut.ac.ir/
这个命令会忽略gif和jpg和swf文件。
一种解决方法是通过代理服务器运行wget。 设置您的代理不允许某些模式。 这将阻止wget从一开始就下载它们。
wget将下载并删除与-R模式相匹配的文件。 它也可以匹配模式,而不仅仅是扩展名或部分文件名。 然而它并没有阻止wget先下载和删除。
httrack确实有一些不错的function,但以我的经验,它保存“文件”的方式可能有点古怪,例如,如果httrack遇到了index.asp?Type = BASIC&PAGEID = 2234234
它可以保存它,但你必须告诉它保存查询的部分
例如%h%p /%n%[TYPE:@TYPE = ::]%[PAGEID:PAGEID = ::]。%t
@是一个问号的占位符,您可以稍后重命名文件,或者可以转义问号而不是? 问题是,。%t会在您的URI的末尾添加一个“.html”,最初没有“.html”。如果你把它关掉,那么下载的图像将缺less文件扩展名。
最好使用wget恕我直言