CURL下载目录


38

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

curl -LO http://example.com/

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

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

Answers:


33

始终对我有用,不包含父项,并且递归仅获得所需的目录。

 wget --no-parent -r http://WEBSITE.com/DIRECTORY

1
这应该是公认的答案。
Juan Jimenez

尝试从git下载文件夹。我尝试了wget --no-parent -r http://WEBSITE.com/DIRECTORY,也没有--no-parent-没有用。
Sam-T

32

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不会尝试从服务器下载它)。


wget如何做到这一点。??
斯里兰卡

@Srikan wget解析HTML以查找其包含的链接,然后递归下载(选择)这些链接。
吉尔(Gilles)'所以

如果文件没有任何内部链接,则递归下载将无法获取所有文件。可以说有一些txt文件的HTTP文件夹。wget将成功获取所有文件。在评论后让我尝试一下
斯里兰卡,2016年

@Srikan HTTP没有目录的概念。递归下载意味着跟随网页中的链接(如果Web服务器这样做包括服务器生成的显示目录列表的网页)。
吉尔(Gilles)'所以

wget支持忽略带有标志的robots.txt -e robots=off。另外,您可以通过拒绝来避免下载-R "robots.txt"
瑞安·克鲁格

17

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

wget -r http://example.com/ 

这是最基本的形式,您也可以使用其他参数。有关更多信息,请参见manpageman wget)。


5

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


看看这个名为Site Sucker的应用程序。sitesucker.us。他们是怎么做到的呢?
Foo 2010年

他们解析HTML文件并下载其中的每个链接。
布拉德(Brad)2010年

使用wgetcurl
Foo 2010年

7
@Brad:curl不会解析HTML,但是wget恰好做到了(这称为递归检索)。
吉尔(Gilles)'“ SO-不要邪恶”

1
嗯,我站得住了! gnu.org/software/wget/manual/html_node / ... OP应该意识到,这仍然没有得到他正在寻找的东西...它仅遵循返回页面上可用的链接。
布拉德(Brad)2010年

2

您可以使用Firefox扩展DownThemAll!一键下载目录中的所有文件。它也是可自定义的,您可以指定要下载的文件类型。这是我发现的最简单的方法。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.