Утилита синхронизации между локальной директорией и облачным хранилищем Яндекс.Диск. Поддерживает автоматическое обновление, удаление и загрузку файлов на основе сравнения имен и хэшей.
- 🔄 Двусторонняя синхронизация: загрузка новых и обновлённых файлов, удаление отсутствующих
- 🕒 Периодическое выполнение по таймеру
- 📁 Работа с локальной и удалённой папкой
- 🔐 Настройка через
.env - ⚙️ Возможность расширения под другие облачные хранилища
- 📓 В планах: логирование и десктоп-оболочка
project/
│
├── .env.template # Шаблон конфигурации окружения
├── config.py # Загрузка переменных из .env
├── hashwork.py # Работа с хэшами и JSON
├── main.py # Точка входа
├── messages.py # Сообщения для CLI
├── settings.py # Логика первичной настройки
├── URLS.py # URL и headers для API Яндекс.Диска
├── yandex.py # Работа с API Яндекс.Диска
Создайте файл .env на основе .env.template:
| Переменная | Описание |
|---|---|
OAUTH_TOKEN |
OAuth-токен для доступа к API Яндекс.Диска |
CLIENT_ID |
Client ID вашего приложения (oauth.yandex.ru) |
SELF_FOLDER |
Абсолютный путь к отслеживаемой локальной папке |
CLOUD_FOLDER |
Путь к соответствующей папке в облаке |
PERIOD |
Период синхронизации в секундах (например, 300) |
PATH_LOG |
Абсолютный путь до папки, где будет храниться лог-файл |
- Запустите
main.py - Выберите первичную настройку (опция 1)
- Следуйте инструкциям: введите токен, Client ID, пути к папкам и период обновлений
- Все данные сохранятся в
.env - После этого синхронизация будет выполняться автоматически каждые
PERIODсекунд
Если файл .env уже настроен — просто выберите опцию 2 (сразу начать синхронизацию).
- Получение списков файлов из локальной и облачной папки
- Сравнение по именам:
- Добавление недостающих файлов в облако
- Удаление из облака файлов, которых нет локально
- Сравнение по хэшам:
- Обновление файлов в облаке, если хэши отличаются
- Загрузка/удаление файлов через API Яндекс.Диска
- Сохранение актуальных хэшей для следующей итерации
Для интеграции с другими облаками предусмотрена абстракция:
Класс облачного хранилища должен реализовывать методы:
class CloudStorageInterface:
def __init__(self, token: str, remote_folder: str): ...
def load(self, path: str): ...
def reload(self, path: str): ...
def delete(self, filename: str): ...
def get_info(self) -> dict: ...Реализация для Яндекс.Диска находится в yandex.py.
- Поддержка синхронизации с Яндекс.Диском
- Добавить логирование (файл + консоль)
- Обработка исключений и уведомления
- GUI-десктоп-приложение (PyQt / Tkinter)
- Поддержка других облачных сервисов (Google Drive, Dropbox и др.)
Проект распространяется под лицензией MIT. См. LICENSE.
Если у вас есть предложения, вопросы или вы хотите внести вклад — добро пожаловать в Issues и Pull Requests!