Wget 不创建目录的索引文件

Wget 不创建目录的索引文件

我正在尝试使用以下命令下载站点:

wget -r -l 0 -p -k -m -e robots=off --restrict-file-names=nocontrol,unix http://example.com

例如,当它找到链接时http://example.com/direction,它会在磁盘上创建一个文件./example.com/direction

然后,例如,它在“方向”中找到一些其他文件(链接),假设http://example.com/direction/11

用一些 HTMLwget重写旧文件./example.com/direction,并将其转换到目录中。然后./example.com/direction/11在那里写入新文件。

如果它在里面发现一个新文件/direction/11,那么它也会重写11并将其转换为目录。

因此,看来我丢失了所有目录索引文件。

wget 本身有解决这个问题的办法吗?

答案1

这可能并不适用于所有情况,但我能够使用一个有点出乎意料的标签来解决这个问题。

来自 wget 1.17.1 手册:

‘-E’

‘--adjust-extension’

‘application/xhtml+xml’如果下载了类型为或的文件‘text/html’且 URL 不以 regexp 结尾‘\.[Hh][Tt][Mm][Ll]?’,则此选项将导致将后缀‘.html’附加到本地文件名。

因此,在您的情况下,当 wget 找到链接时http://example.com/direction,它将检查页面是否为 html 格式。如果是,它将把它作为 保存到本地磁盘/example.com/direction.html。然后当它看到 时http://example.com/direction/11,它将把它作为 保存到磁盘/example.com/direction/11,这样就不会覆盖第一个文件。假设真正的目录结构是/example.com/direction/index.html,它不会与远程目录结构完全匹配,但至少它不会错误地覆盖文件。

答案2

好吧,仅使用 Wget 来解决这个问题几乎是不可能的。让我先试着向你解释一下这个问题。

首先,Wget 尝试下载http://site.com/direction。当 Wget 发送此路径的请求时,服务器将使用中可用的数据进行响应http://site/com/example/index.html。但是,此时,Wget 还不知道发送给它的数据对应于路径:example/index.html。现在,当 Wget 找到另一个文件时,http://site.com/example/11同样的事情又会发生。但是,它必须首先创建目录 example/,然后无条件删除旧文件才能执行此操作。在我看来,Wget 应该检测它是否正在用目录替换文件并将文件保存为索引文件。但是,到目前为止,它还没有这样做。

相关内容