WGET 使用错误的文件和扩展名保存可能是由于 BASH

WGET saves with wrong file and extension name possibly due to BASH

我已经在几个论坛主题上尝试过了。 但是,结果我不断遇到一些失败。

重现问题:

这是一个 url 指向一个有 6 页的论坛帖子。

http://forex.kbpauk.ru/showflat.php/Cat/0/Number/107623/page/0/fpart/1/vc/1

我在控制台中输入的内容是:

wget "http://forex.kbpauk.ru/showflat.php/Cat/0/Number/107623/page/0/fpart/{1..6}/vc/1"

这是我得到的:

      --2018-06-14 10:44:17--  http://forex.kbpauk.ru/showflat.php/Cat/0/Number/107623/page/0/fpart/%7B1..6%7D/vc/1
    Resolving forex.kbpauk.ru (forex.kbpauk.ru)... 185.68.152.1
    Connecting to forex.kbpauk.ru (forex.kbpauk.ru)|185.68.152.1|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: unspecified [text/html]
    Saving to: '1'

1                                    [  <=>                                       ]  19.50K  58.7KB/s    in 0.3s

2018-06-14 10:44:17 (58.7 KB/s) - '1' saved [19970]

文件被简单地保存为“1”,看起来没有扩展名。

我的预期是该文件将以 .html 扩展名保存,因为它是一个网页。

我正在尝试让 WGET 工作,但如果可以用 CURL 做我想做的事情,我也会接受它作为答案。

只需使用 -O 开关来指定输出文件名,否则 wget 将默认为类似于您的情况的 1

所以如果你想调用你的文件 what-i-want-to-call-it.html 那么你会做

 wget "http://forex.kbpauk.ru/showflat.php/Cat/0/Number/107623/page/0/fpart/{1..6}/vc/1" -o what-i-want-to-call-it.html

如果您在控制台中输入 wget --help,您将获得 wget 提供的所有选项的完整列表

要验证它是否有效,请输入以下内容以输出

cat what-i-want-to-call-it.html

好吧,您尝试执行的操作存在一些问题。

  1. URL 周围的双引号实际上阻止了 Bash 扩展,因此您并不是真正下载 6 个文件,而是一个带有“{ 1..6}”在里面。您可能不想在 URL 周围加上引号,以允许 bash 将其扩展为 6 个不同的参数。

  2. 我注意到所有页面都被称为“1”,而不考虑它们的实际页码。这意味着服务器始终提供同名页面,这使得 Wget 或任何其他工具很难真正复制该网页。

创建论坛镜像的真正方法是使用此命令行:

$ wget -m --no-parent -k --adjust-extension http://forex.kbpauk.ru/showflat.php/Cat/0/Number/107623/page/0/fpart/1

让我解释一下这个命令的作用:

-m --mirror 激活镜像模式(递归)
--no-parent 要求 Wget 不要超过它开始的目录
-k --convert-links 将编辑您下载的 HTML 页面,以便其中的链接指向您也下载的其他本地页面。这使您无需在线即可在本地浏览论坛页面
--adjust-extension 这是您最初寻找的选项。如果下载 text/html 文件但服务器未提供扩展名,这将导致 Wget 使用 .html 扩展名保存文件。