使用curl通过共享链接下载Dropbox文件夹(不是公共链接)

时间:2014-01-24 01:15:58

标签: macos bash unix curl dropbox

Dropbox可以通过curl以编程方式下载单个文件(EX:curl -O https://dl.dropboxusercontent.com/s/file.ext)。对于文件夹(常规目录文件夹,而不是压缩)来说,这有点棘手。文件夹的共享链接(而不是文件)不直接链接到压缩文件夹(Dropbox会在下载之前自动压缩文件夹)。看起来你可以在链接的末尾添加?dl=1,因为这将直接在浏览器中开始下载。但是,这指向一个中间html文档,它重定向到实际的zip文件夹,似乎不适用于curl。无论如何使用curl通过共享链接下载文件夹?我意识到最好的解决方案是使用Dropbox api,但对于这个项目,保持尽可能简单是很重要的。此外,必须将解决方案合并到bash shell脚本中。

2 个答案:

答案 0 :(得分:81)

使用-L选项似乎可以使用curl。这会强制卷曲跟随重定向。此外,指定具有.zip扩展名的输出名称非常重要,因为默认情况下将是一个没有扩展名的随机字母数字名称。最后,不要忘记将?dl=1添加到链接的末尾。没有它,curl永远不会到达重定向页面。

curl -L -o newName.zip https://www.dropbox.com/sh/[folderLink]?dl=1

答案 1 :(得分:9)

  1. 关注重定向(使用-L)。您当前的问题是Curl没有关注重定向。

  2. 设置文件名。 (可选)

    • Dropbox已发送带有Dropbox文件名的 Content-Disposition标头如果您使用正确的卷曲标记,则没有理由指定文件名。
    • 相反,您可以使用您选择的内容强制使用文件名。
  3. 使用以下命令之一:

    curl https://www.dropbox.com/sh/AAbbCCEeFF123?dl=1 -O -J -L
    

    保留/写入远程文件名(-O-J)并遵循任何重定向(-L)。

    • 同一行适用于单独共享的文件或整个文件夹。
    • 文件夹将自动保存为.zip(基于文件夹名称)。
    • 不要忘记将参数?dl=0更改为?dl=1(请参阅评论)。

    OR:

    curl https://www.dropbox.com/sh/AAbbCCEeFF123?dl=1 -L -o [filename]
    

    关注重定向(-L)并设置您选择的文件名(-o)。


    注意:一般使用-J标志:

      

    警告:明智地使用此选项,尤其是在Windows上。恶意服务器可以向您发送可能由Windows或某些第三方软件自动加载的DLL或其他文件的名称。

    请参阅:https://curl.haxx.se/docs/manpage.html#OPTIONS(请参阅:-O-J-L-o)了解更多信息。