wget: --convert-links 在已经下载的文件夹中?

usr*_*etc 5 download wget

有没有办法将wget下载和--convert-links功能分开?对于那些不熟悉 和wget/或 的人--convert-links,长话短说,wget 可用于下载网站。--convert-links修改下载的 html 文件,以便下载的网站可以离线工作。它通过转换href/ src/etc 来实现这一点。属性引用本地文件而不是远程网站。

\n

这是官方的解释:

\n
\n

-k\n--转换链接

\n

下载完成后,转换文档中的链接,使其适合本地查看。这不仅影响\n可见的超链接,还影响链接到外部内容的文档的任何部分,例如嵌入图像、到样式表的链接、到非 HTML 内容的超链接等。

\n

每个链接都将通过以下两种方式之一进行更改:

\n

\xe2\x80\xa2 Wget 下载的文件的链接将更改为引用它们作为相对链接指向的文件。

\n

示例:如果下载的文件 /foo/doc.html 链接到 /bar/img.gif(也已下载),则 doc.html 中的链接将被\n修改为指向 ../bar/img.gif。这种转换\n对于目录的任意组合都可靠。

\n

\xe2\x80\xa2 尚未由 Wget 下载的文件的链接将更改为包括主机名和它们指向的位置的\n绝对路径。

\n

示例:如果下载的文件 /foo/doc.html 链接到 /bar/img.gif(或 ../bar/img.gif),则 doc.html 中的链接将被\n修改为指向 http:// /主机名/bar/img.gif。

\n

因此,本地浏览可以可靠地工作:如果下载了链接文件,则该链接将引用其本地名称;如果\n未下载,该链接将引用其完整的 Internet 地址\n而不是显示损坏的链接。之前的链接已转换为相对链接,这一事实可确保您可以将下载的层次结构移动到另一个目录。

\n

注意,只有在下载结束时Wget才能知道哪些链接被下载了。因此,\nk 完成的工作将在所有下载结束时执行。

\n
\n

-k如果(递归)下载被手动中断和恢复,或者如果一开始就没有指定,如何才能在html文件内获得正常的链接?

\n

似乎甚至不能使该过程更加健壮,因为 wget 在下载所有内容--backup-converted后立即转换链接(没有丢失文件),或者你自己(xpath 等)

\n

wal*_*tor 2

由于.html文件是 ASCII 文本,因此您可以.html使用sed. 包含例如http://bad.url/good.part和https://bad.url/good.part的文件应该改为good.url,将未修改的*.html文件保留为*.html.bak.

find . -type f -name '*.html' -print0 | \
  xargs -0 -r sed -i.bak -e 's%://bad\.url/%://good.url/%'
Run Code Online (Sandbox Code Playgroud)

自然而然地读man find xargs sed

  • @DanielKaplan“复杂性”不必要地增加了错误表面。设置本地网络服务器,欺骗`/etc/hosts`,重新传输所有文件,哦,记住`--timestamping`选项。完成后记得撤消所有这些吗?只是为了更改 ASCII 文件中的文本?我的“解决方案”从一开始就在 Unix/Linux 社区中广为人知。我认为它是一种应用于特定情况的众所周知的通用算法。哪些“边缘情况:?这就是我留下`.bak`文件的原因。`diff`来检查更改。您可以调整匹配字符串以获得您想要的结果。 (3认同)