下载 Jupyter 笔记本服务器上路径中的所有文件

Posted

技术标签:

【中文标题】下载 Jupyter 笔记本服务器上路径中的所有文件【英文标题】:Download all files in a path on Jupyter notebook server 【发布时间】: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 还不支持这一点。 【参考方案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://***.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 *

【讨论】:

以上是关于下载 Jupyter 笔记本服务器上路径中的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

linux新手上路_yum

如何通过 REST API 与 Jupyter 笔记本中的代码单元进行交互?

下载为 html 时的 Jupyter 笔记本暗模式无法正确呈现

Jupyter 笔记本中的 BeautifulSoup 和 lxml

将 Google 大查询数据下载到 Jupyter 笔记本,但仅捕获 1000 行

如何腌制或存储 Jupyter (IPython) 笔记本会话以供以后使用