如何以编程方式从保管箱下载许多大文件

How to programmatically download many large files from dropbox

National Speech Corpus 是新加坡人说英语的自然语言处理语料库,可以在这里找到:https://www.imda.gov.sg/programme-listing/digital-services-lab/national-speech-corpus.

当您注册免费语料库时,您会被定向到一个保管箱文件夹。语料库为 1 TB,(截至撰写本文时)有四个部分。我只想下载第 1 部分,但即便如此也有 1446 个 zip 文件,每个文件都相当大。我的问题是:如何仅使用命令行以编程方式将许多大文件从保管箱下载到 Linux (Ubuntu 16.04) VM。

相关部分的目录树如下所示:

root
|-LEXICON
|-PART1
  |-DATA
    |-CHANNEL0
      |-WAVE
        |-SPEAKER0001.zip
        |-SPEAKER0002.zip
        ...
        |-SPEAKER1446.zip

我研究了几种不同的方法:

  1. 通过 wget 命令使用共享 link 下载 WAVE 父目录,如 this question 中所述。但是,这没有用,因为我收到了这个错误:

    重新使用与 www.dropbox.com:443 的现有连接 已发送 HTTP 请求,正在等待响应... 400 Bad Request 2021-01-06 23:09:06 错误 400:错误请求。

我认为这是因为 WAVE 目录太大,Dropbox 无法压缩。

  1. 基于this post,建议我可以下载WAVE父目录的HTML,找到所有直接links 到单个 zip 文件,但直接 links 到单个文件不在 HTML 文件中。

  2. 基于与 (2) 中相同的 post,我还可以尝试使用保管箱 API 为每个 zip 文件创建共享 link ,虽然这看起来太麻烦了。

  3. 下载 Linux 保管箱客户端并按照 this installation.

    中所述同步相关文件

最后,第 4 个选项对我有用,但我想 post 为将来需要下载此数据集的任何人进行此调查。另外,我想看看有没有其他人有更好的方法。

如我所述,对我有用的方法是使用 Dropbox 的 linux 客户端将文件同步到我的 Linux VM。您可以关注these instructions下载Linux客户端。这些说明适用于我的 Ubuntu 16.04 VM。

我在使用同步客户端时遇到的一个问题是如何有选择地排除目录。我的 VM 上只有 630 GB,整个 National Speech Corpus 的大小是 1TB,所以我需要在 Dropbox 同步填满我的磁盘之前排除文件。

您可以使用位于安装页面底部的 dropbox python 脚本有选择地排除文件。脚本的 link 是 here。使用以下命令从我的主目录(自动安装 Dropbox 同步文件夹的位置)调用 python 脚本:

python dropbox.py exclude add ~/Dropbox/<path_to_excluded_dir>

您可能想要停止和启动 Dropbox 客户端,这可以通过以下方式完成:

python dropbox.py start
python dropbox.py stop

最后,查看python脚本中的命令获取更多信息:

python dropbox.py --help

通过这种方法,我能够轻松下载所需的文件,而不会压垮我的 VM。