wget -k在Windows和Linux上以不同方式转换文件

时间:2009-03-10 11:59:27

标签: apache wget

对于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()字符之后的部分被用作查询字符串文件。

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

感谢

4 个答案:

答案 0 :(得分:11)

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

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

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

来自wget文档:

  

当mode设置为“unix”时,Wget   逃脱角色'/'和   控制0-31范围内的字符   和128-159。这是默认设置   类Unix操作系统。

     

当模式设置为“windows”时,Wget   逃脱人物'\','|','/',   ':','?',''','*','<','>'和   控制0-31范围内的字符   和128-159。除此之外,Wget   在Windows模式下使用'+'而不是   ':'将本地的主机和端口分开   文件名,并使用'@'代替   '?'分隔查询部分   其余的文件名。   因此,将保存一个URL   如   “www.xemacs.org:4300/search.pl?input=blah”   在Unix模式下将保存为   “www.xemacs.org+4300/search.pl@input=blah”   在Windows模式下。这种模式是   在Windows上默认。

答案 1 :(得分:4)

  

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

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

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

- 转换链接应该为你做这个,我想 - 如果没有,可能是个错误。

答案 2 :(得分:3)

答案 3 :(得分:0)

  

这在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是单勾)