![使用 wget --mirror 转义查询字符串](https://linux22.com/image/1264595/%E4%BD%BF%E7%94%A8%20wget%20--mirror%20%E8%BD%AC%E4%B9%89%E6%9F%A5%E8%AF%A2%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我使用wget --mirror --html-extension --convert-links
镜像网站,但最终得到很多格式为 的文件名post.php?id=#.html
。当我尝试在浏览器中查看这些文件时,会失败,因为浏览器在加载文件时会忽略查询字符串。有没有办法用?
其他字符替换文件名中的字符?
答案--restrict-file-names=windows
正确。与标志--convert-links
和--adjust-extension
/ -E
(以前名为--html-extension
,也可以使用,但已弃用) 结合使用,它会生成一个按预期运行的镜像。
wget --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example
答案1
查看--restrict-file-names
选项。虽然不完全是为了这个特定目的而设计的,但--restrict-file-names=windows
可能会对你有所帮助:
--restrict-file-names=模式
更改在生成本地文件名期间必须转义的远程 URL 中的字符。[...]
当给出“windows”时,Wget 会转义字符 \、|、/、:、?、"、*、<、> 以及 0-31 和 128-159 范围内的控制字符。除此之外,Windows 模式下的 Wget 使用 + 而不是 : 来分隔本地文件名中的主机和端口,并使用 @ 而不是 ? 将文件名的查询部分与其余部分分隔开。因此,在 Unix 模式下保存为 www.xemacs.org:4300/search.pl?input=blah 的 URL 在 Windows 模式下将保存为 www.xemacs.org+4300/search.pl@input=blah。
答案2
如果你使用如下 URL,你的浏览器将可以正常显示
file:///tmp/example.com/post.php%3Fid=1.html
代替
file:///tmp/example.com/post.php?id=1.html
注意:如果您在下载文件的内部链接方面遇到问题,那是因为您在下载完成之前终止了 wget。由于您指定了 --convert-links 和 --html-extension(仅在指定时适用),wget 通常会修复链接以使用 %3F 而不是 ?;但是,它会在下载完成后最后执行此操作;如果它被中断,它将不会修复任何链接,您将陷入这种困境。当然,您可以随时编写脚本来检查并修复链接,但是……
答案3
wget 没有修改已保存名称的选项。您可能需要做的是创建一个脚本来遍历并将 ? 替换为 _ 或类似内容。Wget 本身无法做到这一点。