【问题标题】:wget -k converts files differently on Windows and Linuxwget -k 在 Windows 和 Linux 上以不同方式转换文件
【发布时间】:2009-03-10 11:59:27
【问题描述】:

我有适用于 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 个生成的页面,因为问号 (?) 字符之后的部分用作查询字符串文件。

关于如何控制它的任何想法?

谢谢

【问题讨论】:

    标签: apache wget


    【解决方案1】:

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

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

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

    来自 wget 文档:

    当模式设置为“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 上的默认设置。

    【讨论】:

    • 非常感谢您提供的信息。我可以批量重命名,但我必须从 html 文件本身内部批量搜索/替换这些引用,对吗?
    • 是的,这将是不必要的工作。我花了一点时间,但我找到了命令行选项。 =)
    【解决方案2】:

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

    要在 URL 路径部分包含问号,您可以对其进行转义:

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

    --convert-links 应该为您执行此操作,我认为 — 如果不是,可能是一个错误。

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

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

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

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

        它取代了 ?在带 %3F 的 href= 或 src= 标记中。 (\x27 是单个刻度)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-16
          • 1970-01-01
          • 2012-04-29
          • 1970-01-01
          相关资源
          最近更新 更多