CURL 下载目录

Foo*_*Foo 56 curl

我正在尝试使用 CURL 下载完整的网站目录。以下命令不起作用:

curl -LO http://example.com/
Run Code Online (Sandbox Code Playgroud)

它返回一个错误:curl: Remote file name has no length!

但是当我这样做时:curl -LO http://example.com/someFile.type它起作用了。知道如何下载指定目录中的所有文件吗?谢谢。

小智 60

总是对我有用,不包括父级,递归只获取所需的目录。

 wget --no-parent -r http://WEBSITE.com/DIRECTORY
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。 (2认同)

Gil*_*il' 34

HTTP 并没有真正的目录概念。除了前三个 ( http://example.com/)之外的斜杠没有任何特殊含义,除非相对于..相对 URL。因此,除非服务器遵循特定格式,否则无法“下载指定目录中的所有文件”。

如果您想下载整个站点,最好的办法是递归遍历主页中的所有链接。Curl 做不到,但 wget 可以。如果网站不是太动态,这将起作用(特别是,wget 不会看到由 Javascript 代码构建的链接)。从 开始wget -r http://example.com/,然后在 wget 手册中的“递归检索选项”和“递归接受/拒绝选项”下查看更多相关选项(递归深度、排除列表等)。

如果网站试图阻止自动下载,您可能需要更改用户代理字符串 ( -U Mozilla),并忽略robots.txt(创建一个空文件example.com/robots.txt并使用该-nc选项,以便 wget 不会尝试从服务器下载它)。


小智 22

在这种情况下,curl不是最好的工具。您可以wget-r参数一起使用,如下所示:

wget -r http://example.com/ 
Run Code Online (Sandbox Code Playgroud)

这是最基本的形式,您也可以使用其他参数。有关详细信息,请参阅manpage( man wget)。


Bra*_*rad 7

这是不可能的。Web 服务器没有标准的、通常实现的方式将目录的内容返回给您。大多数服务器确实会生成目录的 HTML 索引(如果配置为这样做),但此输出不是标准的,也不能以任何方式保证。您可以解析此 HTML,但请记住,格式会因服务器而异,并且不会始终启用。

  • @Brad:curl 不解析 HTML,但 wget 正是这样做的(这称为递归检索)。 (7认同)