Errors
JupyterHub

JupyterHub: How to download all files and folder hierarchy from Jupyter Notebook?

Проходишь курс по data science, смотришь лекции, а тебе в JupyterHub от преподавателя вывалили гору ноутбуков, датасетов и скриптов. Структура красивая, все по

Проходишь курс по data science, смотришь лекции, а тебе в JupyterHub от преподавателя вывалили гору ноутбуков, датасетов и скриптов. Структура красивая, все по папочкам. Хочется сохранить это добро на будущее, а кнопки «скачать всё» нет.

Ты начинаешь кликать. Файл, download, ещё файл, download. Через пять минут понимаешь, что это путь в никуда. Ручное скачивание — это ад, особенно когда папок больше трёх.

Решение в самом Jupyter

К счастью, Jupyter — это по сути Python. Значит, можно написать код, который сделает всё за тебя. Прямо в интерфейсе.

Создаёшь новый ноутбук (New -> Notebook) в корневой папке, откуда нужно всё забрать. Копируешь в первую ячейку этот код:

import os
import tarfile

def recursive_files(dir_name='.', ignore=None):
    for dir_name,subdirs,files in os.walk(dir_name):
        if ignore and os.path.basename(dir_name) in ignore:
            continue

        for file_name in files:
            if ignore and file_name in ignore:
                continue

            yield os.path.join(dir_name, file_name)

def make_tar_file(dir_name='.', tar_file_name='tarfile.tar', ignore=None):
    tar = tarfile.open(tar_file_name, 'w')

    for file_name in recursive_files(dir_name, ignore):
        tar.add(file_name)

    tar.close()


dir_name = '.'
tar_file_name = 'archive.tar'
ignore = {'.ipynb_checkpoints', '__pycache__', tar_file_name}
make_tar_file(dir_name, tar_file_name, ignore)

Запускаешь ячейку (Shift+Enter). Через пару секунд в той же корневой папке появится файл archive.tar.

Что делает этот код

Он рекурсивно обходит все папки, начиная с текущей (.) и упаковывает каждую найденную папку и файл в tar-архив. Это как tar -cf в Linux, но изнутри ноутбука.

Ключевой момент — параметр ignore. Он исключает из архива служебные директории, которые тебе не нужны: .ipynb_checkpoints (скрытые файлы автосохранения Jupyter) и __pycache__ (кеш Python). Исключает он и сам создаваемый архив, чтобы не пытаться добавить сам в себя.

Всё. Архив создан. Теперь ты можешь просто нажать на файл archive.tar в интерфейсе JupyterHub и скачать его одной кнопкой.

Распаковать потом можно любой утилитой: tar -xf archive.tar в терминале, или 7-Zip на Windows, или через файловый менеджер.

Если что-то пошло не так

Проверь, что запускаешь ноутбук именно из той корневой директории, которую хочешь архивировать. Посмотри на путь вверху интерфейса.

Убедись, что у тебя есть права на чтение всех файлов — в учебном окружении это обычно не проблема.

И главное — не игнорируй логику исключений. Если в проекте есть свои __pycache__ или другие служебные данные, добавь их в множество ignore, чтобы не тащить в архив лишнее.

Этот способ — панацея от рутины. Сохраняешь структуру, экономишь нервы и время. Теперь можно спокойно закрывать вкладку курса, зная, что всё ценное уже у тебя.