Утилита python-rsync: асинхронный инструмент для синхронизации файлов с поддержкой дифференциального обновления
Ты реализуешь полноценную CLI-утилиту, которая синхронизирует файлы между машинами, отправляя только изменённые блоки. Это отличный способ прокачать Python, асинхронное программирование, сетевые взаимодействия и алгоритмы, стоящие за реальными инструментами вроде rsync
.
Предоплата 40 000 ₽
При идеальном результате могу вернуть до 100% — 40 000 ₽Цель и задачи работы
Цель — разработать кроссплатформенное приложение на Python, которое умеет синхронизировать файлы между локальной и удалённой системой по принципу rsync
: находить и передавать только изменённые части файлов.
Задачи
- Изучить алгоритм rolling checksum и принципы передачи по дельтам.
- Продумать структуру приложения с упором на модульность и поддержку расширений (например, новые протоколы).
- Реализовать CLI-интерфейс и минимум два способа передачи данных (локально и по сети).
- Обеспечить корректную работу при больших объёмах данных и поддержать логирование и фильтрацию.
Содержание работы
В рамках работы тебе нужно будет
-
Изучить, как работает
rsync
, особенно rolling checksum и delta transfer. Понять, зачем нужны хеши на блоки (Adler32, MD5, SHA1) и какие из них быстрее. -
Изучить способы передачи данных по сети: SSH, HTTP, WebDAV, возможно написать собственный простой TCP-сервер.
-
Спроектировать архитектуру: нужно либо два CLI-режима (клиент/сервер), либо один режим, который может работать в обе стороны.
-
Написать код на Python (желательно с использованием
asyncio
), который- Делит файл на блоки, считает хеши
- Определяет отличия между локальной и удалённой версией
- Передаёт только изменённые блоки
- Поддерживает логирование, исключения по шаблону (
.gitignore
стиль)
-
Настроить тестирование (желательно на больших директориях), сравнить скорость и поведение с
rsync
. -
Документировать код и оформить CLI-помощь.
Результат и критерии завершения работы
На выходе должен получиться исполняемый CLI-инструмент, запускаемый из консоли, умеющий синхронизировать две папки (локально и по сети), с передачей только изменённых блоков. Обязательные критерии завершения
- Работает на Linux/macOS/Windows.
- Поддерживает передачу через SSH или HTTP.
- Передаются только изменённые части файлов.
- Есть CLI-флаги для выбора путей, логирования, исключений.
- Код оформлен и документирован.
- Есть README с инструкцией.
- Все критичные модули покрыты тестами.
Дополнительный плюс: производительность сравнима или лучше, чем у rsync
, при синхронизации больших объёмов данных.