对于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(?)字符之后的部分被用作查询字符串文件。
关于如何控制这个问题的任何想法?
感谢
答案 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是单勾)