Утилита для синхронизации директорий
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
ilyukhin e15d9a0860
Файл для установки утилиты
11 months ago
LICENSE Initial commit 11 months ago
README.md Обновлена установка 11 months ago
dsync Загрузил(а) файлы в '' 11 months ago
install_dsync.sh Файл для установки утилиты 11 months ago

README.md

dsync - Утилита для синхронизации директорий

dsync - это инструмент командной строки для синхронизации локальных проектов с удаленными серверами через SSH и rsync. Позволяет легко управлять синхронизацией нескольких проектов с различными наборами серверов.

Структура проекта

/usr/local/bin/dsync ← глобальный скрипт

/workspace/project1/
├── train.py
├── .dsyncconfig
└── .dsyncignore

/workspace/project2/
├── train2.py
├── .dsyncconfig
└── .dsyncignore

Основные возможности

  • 🚀 Быстрая синхронизация - использует rsync для эффективной передачи файлов
  • 📊 Проверка статуса - показывает изменения перед синхронизацией
  • 🔧 Гибкая настройка - каждый проект имеет свою конфигурацию
  • 🚫 Игнорирование файлов - поддержка .dsyncignore для исключения файлов
  • 🌐 Множественные узлы - синхронизация с несколькими серверами одновременно
  • 🎨 Цветной вывод - понятная визуализация результатов
  • Параллельная обработка - проверка статуса всех узлов одновременно

Установка

Пользовательская установка (в ~/.local/bin)

curl -fsSL "https://git.ai.infran.ru/ilyukhin/dsync/-/raw/main/install_dsync.sh" | bash

Системная установка (в /usr/local/bin) — передаём флаг --system

curl -fsSL "https://git.ai.infran.ru/ilyukhin/dsync/-/raw/main/install_dsync.sh" | bash -s -- --system

Использование

Инициализация проекта

cd /workspace/project1
dsync init

Создает файлы:

  • .dsyncconfig - конфигурация проекта
  • .dsyncignore - паттерны для игнорирования файлов

Управление узлами

# Добавить узлы для синхронизации
dsync add-node user@server1.com user@server2.com

# Удалить узел
dsync del-node user@server1.com

# Показать все узлы
dsync list-nodes

Синхронизация

# Проверить статус (что изменится)
dsync status

# Выполнить синхронизацию
dsync sync

Конфигурационные файлы

.dsyncconfig

{
  "master_dir": "/workspace/project1",
  "nodes": [
    "user@server1.com",
    "user@server2.com"
  ],
  "ignore_file": ".dsyncignore"
}

.dsyncignore

# Системные файлы
.git/
.gitignore
.dsyncconfig
.dsyncignore

# Python
__pycache__/
*.pyc
*.pyo
.venv/
venv/

# IDE
.vscode/
.idea/

# Логи
*.log

# Node.js
node_modules/
.npm

Примеры использования

Базовый workflow

# 1. Инициализация нового проекта
cd /workspace/ml-project
dsync init

# 2. Добавление серверов для обучения
dsync add-node gpu-server1.com gpu-server2.com

# 3. Проверка что будет синхронизировано
dsync status

# 4. Синхронизация
dsync sync

Вывод команды status

Checking status for 2 node(s)...
--------------------------------------------------
[OK] gpu-server1.com: Up to date

[!] gpu-server2.com: 3 change(s) pending
  NEW FILE: train.py
  UPDATE 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 gpu-server1.com:/workspace/ml-project...
[OK] Successfully synced to gpu-server1.com

Syncing to gpu-server2.com:/workspace/ml-project...
[OK] Successfully synced to gpu-server2.com

Sync completed: 2/2 nodes successful

Команды

Команда Описание
dsync init Инициализировать dsync в текущей директории
dsync add-node <node1> [node2...] Добавить один или несколько узлов
dsync del-node <node1> [node2...] Удалить один или несколько узлов
dsync list-nodes Показать все настроенные узлы
dsync status Показать статус синхронизации для всех узлов
dsync sync Синхронизировать со всеми настроенными узлами
dsync help Показать справку

Особенности

  • Удаление файлов: Использует rsync --delete для удаления файлов на удаленных серверах
  • Тайм-ауты: Автоматические тайм-ауты для избежания зависания
  • Параллельность: Проверка статуса всех узлов происходит параллельно
  • Безопасность: SSH-соединения с отключенной проверкой host key
  • Цветной вывод: Зеленый для успеха, желтый для предупреждений, красный для ошибок

Требования

  • Python 3.6+
  • rsync
  • SSH-доступ к удаленным серверам

Примечания

  • Каждый проект должен иметь свою конфигурацию
  • SSH-ключи должны быть настроены для работы без пароля
  • Изменения в .dsyncignore влияют на последующие синхронизации