我正在尝试使用 CURL 下载完整的网站目录。以下命令不起作用:
curl -LO http://example.com/
它返回一个错误:curl: Remote file name has no length!
。
但是当我这样做时:curl -LO http://example.com/someFile.type
它起作用了。知道如何下载指定目录中的所有文件吗?谢谢。
答案1
对我来说总是有效的,不包括父级并且递归仅获取所需的目录。
wget --no-parent -r http://WEBSITE.com/DIRECTORY
答案2
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 不会尝试从服务器下载它)。
答案3
在这种情况下,curl
这不是最好的工具。你可以使用wget
参数-r
,如下所示:
wget -r http://example.com/
这是最基本的形式,并且您也可以使用其他参数。有关更多信息,请参阅manpage
( man wget
)。
答案4
当您从目录列表下载时,向 wget 添加一个名为“reject”的参数。
wget --no-parent -r --reject "index.html*" "http://url"