【问题标题】:Download all files in a path on Jupyter notebook server下载 Jupyter 笔记本服务器上路径中的所有文件
【发布时间】:2017-08-19 22:44:12
【问题描述】:

作为为作业运行 Jupyter 笔记本的班级中的用户,我可以通过 Web 界面访问作业。我假设作业存储在服务器上我个人空间的某个地方,所以我应该能够下载它们。如何下载我个人用户空间中的所有文件? (例如,wget

这是路径结构:

https://urltoserver/user/username

有几个目录:assignments、data等

https://urltoserver/user/username/assignments

https://urltoserver/user/username/data

...

我想下载所有文件夹(递归)。足以让我在本地启动我在网上看到的任何东西。如果有一些被禁止的文件夹,那么好吧,跳过那些并下载其余的。

请完全按照我自己无法理解的方式指定命令(我试过wget

【问题讨论】:

  • 我认为如果我们可以选择多个文件并单击“下载”以获取所有文件,这将非常有用。但是我认为 Jupyter notebook 还不支持这一点。

标签: wget jupyter-notebook jupyter


【解决方案1】:

尝试在您的一个笔记本中将其作为单独的单元格运行:

!tar chvfz notebook.tar.gz *

如果您想覆盖树上的更多文件夹,请在目录的每一步之前在* 之前写上../notebook.tar.gz 文件将保存在与您的笔记本相同的文件夹中。

【讨论】:

  • 这非常有效。您为我节省了数小时的手动下载时间!谢谢
  • 从 Jupyter 笔记本中转到文件 -> 打开。这将打开一个新的浏览器选项卡。从那里单击新 tar.gz 旁边的复选框。顶部会出现一个“下载”按钮。点击它,指定本地路径并保存。
  • 仅供参考,!tar chvfz notebook.tar.hz * 也会拉入作为符号链接的文件,因此您不会有损坏的图像。
  • 这只是其中一个答案,我非常感谢!
  • 如果不跟随链接文件,使用tar命令的h选项
【解决方案2】:

我正在通过 Coursera 参加 Andrew Ng 教授的 Deeplearning.ai 计划。该课程在线使用 Jupyter Notebooks。与笔记本一起是带有大文件的文件夹。这是我用来成功将所有作业以及相关文件和文件夹下载到本地 Windows 10 PC 的内容。

从上面 Serzan Akhmetov 的帖子中建议的以下代码行开始:

!tar cvfz allfiles.tar.gz *

这会生成一个 tarball,如果足够小,可以从 Jupyter notebook 本身下载并使用 7-Zip 解压缩。但是,本课程有大小为 100 MB 的单个文件和包含 100 个示例图像的文件夹。生成的 tarball 太大,无法通过浏览器下载。

所以再添加一行代码将文件拆分为可管理的块大小,如下所示:

!split -b 50m allfiles.tar.gz allfiles.tar.gz.part.

这会将存档分成多个部分,每个部分大小为 50 Mb(或您的首选大小设置)。每个部分都有一个扩展名,如allfiles.tar.gz.part.xx。像以前一样下载每个部分。

最后的任务是解压多部分存档。这对于 7-Zip 来说非常简单。只需选择系列中的第一个文件以使用 7-Zip 进行提取。对于所使用的示例,这是名为 allfiles.tar.gz.part.aa 的文件。只要它们在同一个文件夹中,它将把所有必要的部分放在一起。

希望这有助于添加以上 Serzan 的出色回答。

【讨论】:

  • 不想使用 7-Zip 的用户可以留在 unix/linux 并使用!cat allfiles* > your_file_name.gz。这会将目录中以所有文件开头的所有内容合并到一个文件中
  • 但这似乎只是在远程服务器上创建了tar,如何下载到本地PC?
  • 右键单击 tar 文件将提供一组选项,包括下载@ChristyLee
【解决方案3】:

您可以从“新建”菜单中创建一个新终端并调用https://stackoverflow.com/a/47355754/8554972中描述的命令:

tar cvfz notebook.tar.gz *

文件 notebook.tar.gz 将保存在与您的笔记本相同的文件夹中。

【讨论】:

  • cvfz 更改为chvfz 将下载符号链接文件。
【解决方案4】:

最简单的方法是使用 tar 归档所有内容,但也有用于文件下载的 API。

GET /files/_FILE_PATH_

要获取文件夹中的所有文件,您可以使用:

GET /api/contents/work

例子:

curl https://server/api/contents?token=your_token
curl https://server/files/path/to/file.txt?token=your_token --output some.file

来源:Jupyter Docs

【讨论】:

    【解决方案5】:

    首先尝试通过以下方式获取目录:

    import os
    os.getcwd()
    

    然后使用来自How to create a zip archive of a directory 的片段。 您可以通过压缩它来下载完整的目录。 祝你好运!

    【讨论】:

      【解决方案6】:

      我认为wget 不可能做到这一点,即使使用wget -r 选项也是如此。您可能需要单独下载它们(使用仪表板视图中的“下载”选项(仅适用于单个、非目录、非运行的笔记本项目),如果您可以使用的话。

      但是,您可能无法下载它们,因为如果您的老师使用的是 nbgrader 等评分软件,那么学生自己可以访问笔记本是不可取的 - 因为笔记本也可以包含有关答案的信息。

      【讨论】:

        【解决方案7】:
        from google.colab import files
        
        files.download("/content/data.txt")
        

        如果您在 google colab 或 Jupyter notebook 中工作,这些行可能会起作用。

        第一行导入库文件 第二个,下载您创建的文件,例如:“data.txt”(您的文件名)位于内容中。

        【讨论】:

        • 虽然这段代码可能会解决问题,但一个好的答案还应该解释代码的什么以及它如何提供帮助。
        【解决方案8】:

        我在@Sun Bee 的solution 的基础上做了一点更新,它将允许您创建带有时间戳子前缀的多个文件备份。

        !tar cvfz allfiles-`date +"%Y%m%d-%H%M"`.tar.gz *
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-15
          • 1970-01-01
          相关资源
          最近更新 更多