对于Windows和Linux,我有 GNU Wget 1.10.2 -k 选项在这两个选项上表现不同。

  

-k, - convert-links使下载的HTML中的链接指向本地文件。

在Windows上它会产生:

www.example.com/index.html
www.example.com/index.html@page=about
www.example.com/index.html@page=contact
www.example.com/index.html@page=sitemap

并在linux上产生:

www.example.com/index.html
www.example.com/index.html?page=about
www.example.com/index.html?page=contact
www.example.com/index.html?page=sitemap

这在linux中是有问题的,因为当我通过Apache服务镜像时,它不会区分4个生成的页面,因为在questionmark()字符之后的部分被用作查询字符串文件。

关于如何控制这个问题的任何想法?

感谢

有帮助吗?

解决方案

您不能在NTFS或FAT32上的文件名中使用问号(?)。这就是wget使用at符号(@)的原因。

在Linux中,大多数文件系统上只禁止使用斜杠(/),因此wget使用问号(因为它是URI的一部分)。

您可以使用--restrict-file-names=unix--restrict-file-names=windows强制执行任何行为。

来自wget文档:

  

当模式设置为<!>#8220; unix <!>#8221;时,Wget   逃脱角色<!>#8216; / <!>#8217;和   控制范围0 <!>#8211; 31中的字符   和128 <!>#8211; 159。这是默认设置   类Unix操作系统。

     

当模式设置为<!>#8220; windows <!>#8221;,Wget   转义字符<!>#8216; \ <!>#8217;,<!>#8216; | <!>#8217;,<!>#8216; / <!>#8217;,   <!>#8216;:<!>#8217;,<!>#8216;?<!>#8217;,<!>#8216; <!>“; <!>#8217;,<!># 8216; * <!>#8217;,<!>#8216; <!> lt; <!>#8217;,<!>#8216; <!> gt; <!>#8217;和   控制范围0 <!>#8211; 31中的字符   和128 <!>#8211; 159。除此之外,Wget   在Windows模式下使用<!>#8216; + <!>#8217;代替   #8216 <!>;:<!>#8217;在本地分离主机和端口   文件名,并使用<!>#8216; @ <!>#8217;代替   #8216 <!>; <>!#8217;分开查询部分   其余的文件名。   因此,将保存一个URL   如   #8216 <!>; <!> www.xemacs.org:4300/search.pl?input=blah#8217;   在Unix模式下将保存为   #8216 <!>; <!> www.xemacs.org+4300/search.pl@input=blah#8217;   在Windows模式下。这种模式是   在Windows上默认。

其他提示

  

这在linux中存在问题,因为当我通过Apache服务镜像时,它不会区分4个生成的页面,因为在使用questionmark(?)字符作为文件的查询字符串之后的部分。

要在URL路径部分中包含问号,您可以将其转义:

www.example.com/index.html%3Fpage=about

- 转换链接应该为你做这个,我想<!>#8201; <!>#8212; <!>#8201;如果没有,可能是个bug。

  

这在linux中是有问题的,因为当我通过镜像服务时   Apache它不会区分4个生成的页面   在使用questionmark(?)字符作为查询字符串之后的部分   到文件。

如果已经很晚了,这个sed命令帮助了我:

find . -type f -name "*html*" -exec sed -i -r 's/(src|href)=(["\x27])(.*?)(\?)(.*?)\2/\1=\2\3%3F\5\2/g' {} + 

它取代了吗?在href =或src =带有%3F的标签。 (\ x27是单勾)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top