使用wget --mirror转义查询字符串


15

我曾经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

Answers:


16

参见--restrict-file-names选项。尽管不完全适合此特定目的,但--restrict-file-names=windows可能会帮助您:

--restrict-file-names =模式

更改在生成本地文件名期间必须对在远程URL中找到的字符进行转义。[...]

当给定“ windows”时,Wget会转义字符\,|,/,:,?,“,*,<,>和控制字符,其范围为0--31和128--159。 ,Windows模式下的Wget使用+而不是:来将本地文件名中的主机和端口分开,并使用@而不是?来将文件名的查询部分与其余部分分开,因此,该URL将被保存为www。在Unix模式下,xemacs.org:4300 / search.pl?input = blah在Windows模式下将另存为www.xemacs.org+4300/search.pl@input=blah。


2

如果您使用以下网址,则您的浏览器会很好看:

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而不是?;。但是,在完成下载后,它会在最后完成;如果它已被中断,它将不会修复任何链接,您将陷入困境。当然,您始终可以编写脚本来检查和修复链接,但是...


这不是很正确,wget不会无中断http://site.com/article.cgi?25地保存类似URL的信息,article.cgi?25.html请参见2.7节,位于gnu.org/software/wget/manual/wget.html#HTTP-Options
Tzury Bar Yochay

-2

wget没有修改保存名称的选项。您可能需要做的是创建一个脚本来进行替换?与_或类似名称。仅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.