| 
							
								 | 
							
							# dsync - Утилита для синхронизации директорий
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							**dsync** - это инструмент командной строки для синхронизации локальных проектов с удаленными серверами через SSH и rsync. Позволяет легко управлять синхронизацией нескольких проектов с различными наборами серверов.
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							## Структура проекта
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							/workspace/project1/
 | 
						
						
						
						
							 | 
							
								 | 
							
							├── train.py
 | 
						
						
						
						
							 | 
							
								 | 
							
							├── .dsyncconfig
 | 
						
						
						
						
							 | 
							
								 | 
							
							└── .dsyncignore
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							/workspace/project2/
 | 
						
						
						
						
							 | 
							
								 | 
							
							├── train2.py
 | 
						
						
						
						
							 | 
							
								 | 
							
							├── .dsyncconfig
 | 
						
						
						
						
							 | 
							
								 | 
							
							└── .dsyncignore
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							## Основные возможности
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							- 🚀 **Быстрая синхронизация** - использует rsync для эффективной передачи файлов
 | 
						
						
						
						
							 | 
							
								 | 
							
							- 📊 **Проверка статуса** - показывает изменения перед синхронизацией
 | 
						
						
						
						
							 | 
							
								 | 
							
							- 🔧 **Гибкая настройка** - каждый проект имеет свою конфигурацию
 | 
						
						
						
						
							 | 
							
								 | 
							
							- 🚫 **Игнорирование файлов** - поддержка .dsyncignore для исключения файлов
 | 
						
						
						
						
							 | 
							
								 | 
							
							- 🌐 **Множественные узлы** - синхронизация с несколькими серверами одновременно
 | 
						
						
						
						
							 | 
							
								 | 
							
							- 🗂️ Пер-нодовые пути — remote_dir на каждую ноду
 | 
						
						
						
						
							 | 
							
								 | 
							
							- 🎨 **Цветной вывод** - понятная визуализация результатов
 | 
						
						
						
						
							 | 
							
								 | 
							
							- ⚡ **Параллельная обработка** - проверка статуса всех узлов одновременно
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							## Установка
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							Пользовательская установка (в ~/.local/bin)
 | 
						
						
						
						
							 | 
							
								 | 
							
							```bash
 | 
						
						
						
						
							 | 
							
								 | 
							
							curl -fsSL "https://git.ai.infran.ru/ilyukhin/dsync/raw/branch/main/install_dsync.sh" | bash
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							Системная установка (в /usr/local/bin) — передаём флаг --system
 | 
						
						
						
						
							 | 
							
								 | 
							
							```bash
 | 
						
						
						
						
							 | 
							
								 | 
							
							curl -fsSL "https://git.ai.infran.ru/ilyukhin/dsync/raw/branch/main/install_dsync.sh" | bash -s -- --system
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							## Использование
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### Инициализация проекта
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							```bash
 | 
						
						
						
						
							 | 
							
								 | 
							
							cd /workspace/project1
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync init
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							Создает файлы:
 | 
						
						
						
						
							 | 
							
								 | 
							
							- `.dsyncconfig` - конфигурация проекта
 | 
						
						
						
						
							 | 
							
								 | 
							
							- `.dsyncignore` - паттерны для игнорирования файлов
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### Управление узлами
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							```bash
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Добавить узлы для синхронизации
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync add-node user@server1.com user@server2.com:/workspace/data user@server3.net:~/configs
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Удалить узел
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync del-node user@server1.com
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Показать все узлы
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync list-nodes
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### Синхронизация
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							```bash
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Проверить статус
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync status
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Выполнить синхронизацию
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync sync
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							## Конфигурационные файлы
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### `.dsyncconfig`
 | 
						
						
						
						
							 | 
							
								 | 
							
							```json
 | 
						
						
						
						
							 | 
							
								 | 
							
							{
 | 
						
						
						
						
							 | 
							
								 | 
							
							  "master_dir": "/workspace/project1",
 | 
						
						
						
						
							 | 
							
								 | 
							
							  "nodes": [
 | 
						
						
						
						
							 | 
							
								 | 
							
							    { "name": "user@server1", "remote_dir": "/srv/projects/p1" },
 | 
						
						
						
						
							 | 
							
								 | 
							
							    { "name": "user@server3", "remote_dir": null }
 | 
						
						
						
						
							 | 
							
								 | 
							
							  ],
 | 
						
						
						
						
							 | 
							
								 | 
							
							  "ignore_file": ".dsyncignore"
 | 
						
						
						
						
							 | 
							
								 | 
							
							}
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### `.dsyncignore`
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Системные файлы
 | 
						
						
						
						
							 | 
							
								 | 
							
							.git/
 | 
						
						
						
						
							 | 
							
								 | 
							
							.gitignore
 | 
						
						
						
						
							 | 
							
								 | 
							
							.dsyncconfig
 | 
						
						
						
						
							 | 
							
								 | 
							
							.dsyncignore
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Python
 | 
						
						
						
						
							 | 
							
								 | 
							
							__pycache__/
 | 
						
						
						
						
							 | 
							
								 | 
							
							*.pyc
 | 
						
						
						
						
							 | 
							
								 | 
							
							*.pyo
 | 
						
						
						
						
							 | 
							
								 | 
							
							.venv/
 | 
						
						
						
						
							 | 
							
								 | 
							
							venv/
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# IDE
 | 
						
						
						
						
							 | 
							
								 | 
							
							.vscode/
 | 
						
						
						
						
							 | 
							
								 | 
							
							.idea/
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Логи
 | 
						
						
						
						
							 | 
							
								 | 
							
							*.log
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Node.js
 | 
						
						
						
						
							 | 
							
								 | 
							
							node_modules/
 | 
						
						
						
						
							 | 
							
								 | 
							
							.npm
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							## Примеры использования
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### Базовый workflow
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							```bash
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 1. Инициализация нового проекта
 | 
						
						
						
						
							 | 
							
								 | 
							
							cd /workspace/ml-project
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync init
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 2. Добавление серверов для обучения
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync add-node gpu-server1.com gpu-server2.com
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 3. Проверка что будет синхронизировано
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync status
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 4. Синхронизация
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync sync
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### Форматы указания нод
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							Можно указывать ноды несколькими способами:
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							```bash
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 1) Без пути — возьмётся master_dir из .dsyncconfig
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync add-node user@server1
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 2) С путём в одном токене
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync add-node user@server1:/remote/project1
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 3) Альтернативная форма для одной ноды — двумя аргументами
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync add-node user@server2 /another/dir
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 4) Смешанно и сразу несколько
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync add-node user@h1 user@h2:/work/a user@h3 /work/b
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### Управление нодами
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							```bash
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Добавить ноды
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync add-node user@server1 user@server2:/srv/ml/project
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Изменить путь у существующей ноды
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync set-node-dir user@server1 /srv/projects/p1
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Сбросить путь (использовать master_dir)
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync clear-node-dir user@server1
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Удалить ноду
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync del-node user@server2
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							# Показать все ноды с их фактическими путями
 | 
						
						
						
						
							 | 
							
								 | 
							
							dsync list-nodes
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### Вывод команды list-nodes
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							Configured nodes:
 | 
						
						
						
						
							 | 
							
								 | 
							
							  1. user@server1  ->  /srv/projects/p1
 | 
						
						
						
						
							 | 
							
								 | 
							
							  2. user@server3  ->  /workspace/project1   # взят master_dir
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### Вывод команды status
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							Checking status for 2 node(s)...
 | 
						
						
						
						
							 | 
							
								 | 
							
							--------------------------------------------------
 | 
						
						
						
						
							 | 
							
								 | 
							
							[OK] user@server1  (/srv/projects/p1): Up to date
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							[!] user@server3  (/workspace/project1): 3 change(s) pending
 | 
						
						
						
						
							 | 
							
								 | 
							
							  NEW FILE: train.py
 | 
						
						
						
						
							 | 
							
								 | 
							
							  SEND FILE: config.json (content, timestamp)
 | 
						
						
						
						
							 | 
							
								 | 
							
							  DELETE: old_model.pkl
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							--------------------------------------------------
 | 
						
						
						
						
							 | 
							
								 | 
							
							Summary: 2 active, 0 error(s), 3 total changes
 | 
						
						
						
						
							 | 
							
								 | 
							
							Run 'dsync sync' to apply changes
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							### Вывод команды sync
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							Syncing to user@server1:/srv/projects/p1...
 | 
						
						
						
						
							 | 
							
								 | 
							
							[OK] Successfully synced to user@server1 (/srv/projects/p1)
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							Syncing to user@server3:/workspace/project1...
 | 
						
						
						
						
							 | 
							
								 | 
							
							[OK] Successfully synced to user@server3 (/workspace/project1)
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							Sync completed: 2/2 nodes successful
 | 
						
						
						
						
							 | 
							
								 | 
							
							```
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							## Команды
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							| Команда                                  | Описание                                                                              |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| ---------------------------------------- | ------------------------------------------------------------------------------------- |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| `dsync init`                             | Инициализировать dsync в текущей директории                                           |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| `dsync add-node <node1> [node2 ...]`     | Добавить ноды. Форматы: `user@host`, `user@host:/dir`, либо `add-node user@host /dir` |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| `dsync del-node <node1> [node2 ...]`     | Удалить одну или несколько нод                                                        |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| `dsync set-node-dir <node> <remote_dir>` | Установить/изменить удалённый путь для ноды                                           |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| `dsync clear-node-dir <node>`            | Сбросить путь ноды (будет использоваться `master_dir`)                                |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| `dsync list-nodes`                       | Показать ноды с фактическими путями                                                   |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| `dsync status`                           | Показать ожидаемые изменения по всем нодам                                            |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| `dsync sync`                             | Выполнить синхронизацию на все ноды                                                   |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| `dsync help`                             | Показать справку                                                                      |
 | 
						
						
						
						
							 | 
							
								 | 
							
							| `dsync version`                          | Показать версию                                                                       |
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							## Особенности
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							- **Удаление файлов**: Использует `rsync --delete` для удаления файлов на удаленных серверах
 | 
						
						
						
						
							 | 
							
								 | 
							
							- **Тайм-ауты**: Автоматические тайм-ауты для избежания зависания
 | 
						
						
						
						
							 | 
							
								 | 
							
							- **Параллельность**: Проверка статуса всех узлов происходит параллельно
 | 
						
						
						
						
							 | 
							
								 | 
							
							- **Безопасность**: SSH-соединения с отключенной проверкой host key
 | 
						
						
						
						
							 | 
							
								 | 
							
							- **Цветной вывод**: Зеленый для успеха, желтый для предупреждений, красный для ошибок
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							## Требования
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							- Python 3.6+
 | 
						
						
						
						
							 | 
							
								 | 
							
							- rsync
 | 
						
						
						
						
							 | 
							
								 | 
							
							- SSH-доступ к удаленным серверам
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							## Примечания
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							- Каждый проект должен иметь свою конфигурацию
 | 
						
						
						
						
							 | 
							
								 | 
							
							- SSH-ключи должны быть настроены для работы без пароля
 | 
						
						
						
						
							 | 
							
								 | 
							
							- Изменения в `.dsyncignore` влияют на последующие синхронизации
 | 
						
						
						
						
							 | 
							
								 | 
							
							- Пути с пробелами экранируйте кавычками: `dsync set-node-dir user@host "/srv/projects with space/p1"` |