Files

43 KiB
Raw Permalink Blame History

Sbackup

Python License PyPI Tests Platform

Лёгкий и эффективный инструмент резервного копирования папок с поддержкой командной строки, позволяющий удобно управлять стратегиями бэкапов.

English | Deutsch | Espanol | Francais | Portugues | Pycckuu | 日本語 | 한국어 | 中文


Введение

Sbackup -- это лёгкий инструмент резервного копирования папок, позволяющий добавлять, удалять и просматривать стратегии бэкапов через командную строку. Он определяет необходимость резервного копирования на основе времени последнего изменения папки, гарантируя, что ваши данные всегда остаются актуальными.

Возможности

  • Инкрементальное резервное копирование: копируются только изменённые папки, что экономит время и дисковое пространство
  • Поддержка множества форматов: семь форматов упаковки -- ZIP, tar, tar.gz, tar.bz2, tar.xz, tar.zst, 7z; можно задавать как глобально, так и для каждого элемента отдельно
  • Удалённое резервное копирование через SFTP: на базе библиотеки paramiko, поддержка аутентификации по паролю/SSH-ключу, автоматическое определение ключа по умолчанию
  • Удалённое резервное копирование через WebDAV: на базе стандартной библиотеки urllib, без дополнительных зависимостей; поддержка Jianguoyun/NextCloud/Synology
  • Облачное хранилище S3: на базе библиотеки minio, совместимо со всеми S3-хранилищами (AWS/MinIO/Aliyun OSS и др.)
  • Параллельное копирование в несколько направлений: одновременное резервное копирование на локальный диск и несколько удалённых хранилищ
  • Восстановление из бэкапа: распаковка и восстановление в указанную директорию с возможностью выборочного восстановления
  • Очистка старых бэкапов: автоматическое удаление с поддержкой стратегий по количеству/времени/ежедневному хранению
  • Шифрование: парольное шифрование для формата 7z + шифрование PBKDF2 для всех форматов
  • Планирование: автоматическое выполнение по расписанию, поддержка мониторинга файловой системы в реальном времени (watchdog)
  • История резервных копий: запись времени, размера и контрольной суммы SHA256 каждого бэкапа для удобного отслеживания
  • Журнал аудита: запись всех событий резервного копирования и восстановления
  • Pre/Post Hook: выполнение пользовательских команд до и после резервного копирования
  • Профили конфигурации: сохранение, переключение, импорт и экспорт нескольких конфигураций
  • Поиск по архивам: поиск совпадающих имён файлов в нескольких бэкапах
  • Целостность данных: генерация и проверка контрольных сумм SHA256, корректирующие коды Рида-Соломона
  • Валидация конфигурации: автоматическая проверка параметров конфигурации, обнаружение несанкционированных изменений
  • Очередь задач: управление очередью задач резервного копирования с возможностью добавления, выполнения и отмены
  • Бенчмарк сжатия: сравнение производительности различных форматов и уровней сжатия
  • Оценка дискового пространства: предварительный расчёт размера бэкапа по типам файлов с проверкой места на диске
  • Интернационализация: поддержка девяти языков -- китайский, английский, французский, испанский, русский, немецкий, японский, португальский, корейский
  • Автодополнение в оболочке: bash/zsh/fish/powershell
  • Лёгкость и эффективность: малый размер, быстрый запуск, низкое потребление ресурсов
  • Кроссплатформенность: поддержка Windows, macOS и Linux

Быстрый старт

Установка

Установка через pip

pip install sbackup-cli

После установки доступна команда sbackup (имя пакета на PyPI -- sbackup-cli, имя CLI-команды -- sbackup).

Установка из исходного кода

git clone https://github.com/xiatianxuan/sbackup.git
cd sbackup
uv sync

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

Основной синтаксис

uv run python main.py <command> [options]

Доступные команды

Команда Описание
add Добавить стратегию резервного копирования
rm / remove Удалить стратегию резервного копирования
edit Редактировать существующую стратегию
all Показать все стратегии резервного копирования
save Выполнить резервное копирование
watch Запустить резервное копирование по расписанию
restore Восстановить из файла резервной копии
info Показать подробную информацию о файле резервной копии
diff Сравнить исходную директорию с резервной копией
verify Проверить целостность файла резервной копии
search Поиск файлов в резервной копии
xsearch Поиск по нескольким архивам резервных копий
versions Показать историю версий резервных копий
sftp Управление удалённым резервным копированием через SFTP
webdav Управление удалённым резервным копированием через WebDAV
remote Управление удалёнными файлами (list/rm)
task Управление очередью задач резервного копирования
audit Запрос журнала аудита
hooks Ручной запуск Pre/Post Hook
profile Управление профилями конфигурации
rotate Ротация резервных копий
clean Очистка старых резервных копий
diskcheck Оценка дискового пространства
benchmark Бенчмарк форматов сжатия
integrity Проверка целостности директории резервных копий
dry-run Предварительный просмотр выбора файлов
export / import Экспорт/импорт стратегий резервного копирования
ignore Генерация файла .sbackupignore
schedule Экспорт конфигурации планировщика
webhook Настройка предустановок Webhook
config Шифрование/проверка конфигурации
report Генерация отчёта о резервном копировании
completion Генерация скрипта автодополнения для оболочки
wizard Интерактивный мастер настройки
status Панель состояния резервного копирования
version Показать информацию о версии
help Показать справку

Глобальные параметры

Параметр Описание
--lang zh_CN / en_US / fr_FR / es_ES / ru_RU / de_DE / ja_JP / pt_BR / ko_KR Установить язык интерфейса (сохраняется в config.json)
--format zip / tar / tar.gz / tar.bz2 / tar.xz / tar.zst / 7z Установить формат упаковки (сохраняется в config.json)
--debug Включить отладочное логирование

Добавление стратегии резервного копирования

uv run python main.py add <source> <dest> [-i ignore_patterns]

Параметры:

  • source: путь к исходной папке для резервного копирования
  • dest: путь к директории для хранения резервных копий
  • -i, --ignore: имена файлов или папок, которые следует игнорировать, через запятую (по умолчанию: .git,__pycache__)
  • --format: формат упаковки на уровне элемента (применяется только к данной стратегии; если не указан, используется глобальный по умолчанию): zip / tar / tar.gz / tar.bz2 / tar.xz / tar.zst / 7z

Примеры:

# Добавить стратегию с форматом по умолчанию
uv run python main.py add F:/my_folder F:/backup -i node_modules,.git

# Указать формат tar.gz для данной стратегии (каждый бэкап этой папки будет в формате tar.gz)
uv run python main.py add F:/my_folder F:/backup --format tar.gz

# Указать формат 7z (только для этой папки)
uv run python main.py add F:/my_folder F:/backup --format 7z

Удаление стратегии резервного копирования

uv run python main.py rm <path>

Параметры:

  • path: путь к исходной папке, стратегию которой нужно удалить

Пример:

uv run python main.py rm F:/my_folder

Просмотр всех стратегий резервного копирования

uv run python main.py all

Отображает все текущие настроенные стратегии резервного копирования.

Выполнение резервного копирования

# С использованием формата по умолчанию (ZIP)
uv run python main.py save

# С использованием формата tar.gz
uv run python main.py --format tar.gz save

# Сохранить последние 5 резервных копий, автоматически удалить старые
uv run python main.py save --keep 5

# Использовать формат 7z с шифрованием
uv run python main.py --format 7z save --password mysecret

# Английский интерфейс + формат tar.xz
uv run python main.py --lang en_US --format tar.xz save

Параметры команды save:

Параметр Значение по умолчанию Описание
--keep N 0 Сохранять N последних резервных копий; 0 -- не удалять старые
--password PASSWORD "" Пароль шифрования (только для формата 7z)
--sftp false Загрузить на SFTP-сервер после завершения резервного копирования
--webdav false Загрузить на WebDAV-сервер после завершения резервного копирования

Автоматическое резервное копирование изменённых папок в соответствии с настроенными стратегиями.

Планирование резервного копирования

# Выполнять резервное копирование каждые 60 минут
uv run python main.py watch --interval 60

# Каждые 2 часа, сохранять последние 10 файлов
uv run python main.py watch --interval 120 --keep 10

# Планирование + шифрование 7z
uv run python main.py --format 7z watch --interval 60 --password mysecret

Параметры команды watch:

Параметр Значение по умолчанию Описание
--interval MINUTES 60 Интервал резервного копирования (в минутах)
--keep N 0 Сохранять N последних резервных копий
--password PASSWORD "" Пароль шифрования (только для формата 7z)
--sftp false Загружать на SFTP-сервер после каждого бэкапа
--webdav false Загружать на WebDAV-сервер после каждого бэкапа

Нажмите Ctrl+C, чтобы остановить планирование.

Восстановление из резервной копии

uv run python main.py restore <backup_file> <target_dir>

Параметры:

  • backup_file: путь к файлу резервной копии (поддерживаются форматы .zip / .tar / .tar.gz / .tar.bz2 / .tar.xz / .tar.zst / .7z)
  • target_dir: целевая директория для восстановления

Примеры:

uv run python main.py restore F:/backup/my_folder.tar.gz F:/restored
uv run python main.py restore F:/backup/my_folder.7z F:/restored
uv run python main.py restore F:/backup/my_folder.tar.zst F:/restored

Удалённое резервное копирование через SFTP

# ============ Быстрый старт (рекомендуется) ============
# 1. Настроить SFTP (автоматическое определение SSH-ключа, без ручного указания)
sbackup sftp config --host 192.168.1.100 --user admin --remote-path /backups

# 2. Проверить соединение
sbackup sftp test

# 3. Выполнить резервное копирование и загрузить
sbackup save --sftp

# ============ Способы аутентификации ============

# Способ 1: Автоматическое определение ключа (рекомендуется)
# Система автоматически проверяет ~/.ssh/id_ed25519 -> id_rsa -> id_ecdsa
sbackup sftp config --host 192.168.1.100 --user admin

# Способ 2: Аутентификация по паролю
sbackup sftp config --host 192.168.1.100 --user admin --password secret

# Способ 3: Указание конкретного ключа
sbackup sftp config --host 192.168.1.100 --user admin --key-file ~/.ssh/id_rsa

# Способ 4: Ключ + парольная фраза (интерактивный ввод)
sbackup sftp config --host 192.168.1.100 --user admin --key-file ~/.ssh/id_rsa

# Способ 5: Ключ + парольная фраза (через командную строку)
sbackup sftp config --host 192.168.1.100 --user admin --key-file ~/.ssh/id_rsa --key-passphrase mykeypass

# ============ Сценарии использования ============

# Сценарий 1: Разовое резервное копирование с загрузкой
sbackup save --sftp

# Сценарий 2: Планирование с автоматической загрузкой (каждые 60 минут)
sbackup watch --interval 60 --sftp

# Сценарий 3: Указание формата + загрузка
sbackup --format tar.gz save --sftp

# Сценарий 4: Шифрованное резервное копирование + загрузка
sbackup --format 7z save --password mysecret --sftp

# Сценарий 5: Сохранение последних 5 копий + загрузка
sbackup save --keep 5 --sftp

# ============ Расширенное использование ============

# Интерактивная настройка (пошаговый ввод всех параметров)
sbackup sftp config

# Неинтерактивная настройка (все параметры через командную строку)
sbackup sftp config --host 192.168.1.100 --port 22 --user admin --password secret --remote-path /backups

# Проверка соединения с подробным логом
sbackup --debug sftp test

Подкоманды sftp:

Подкоманда Описание Пример
sftp config Настройка параметров подключения SFTP (host/port/user/password/key_file/key_passphrase/remote_path) sbackup sftp config --host 192.168.1.100 --user admin
sftp test Проверка доступности SFTP-соединения sbackup sftp test

Способы аутентификации:

Способ Параметры Описание Пример
Автоопределение Без указания параметров аутентификации Автоматическая проверка ~/.ssh/id_ed25519 -> id_rsa -> id_ecdsa (рекомендуется) sbackup sftp config --host ... --user ...
Пароль --password Вход по паролю sbackup sftp config --host ... --user ... --password secret
Приватный ключ --key-file Вход с использованием указанного SSH-ключа sbackup sftp config --host ... --user ... --key-file ~/.ssh/id_rsa
Ключ + фраза --key-file + --key-passphrase Для ключа с парольной фразой sbackup sftp config --host ... --user ... --key-file ~/.ssh/id_rsa --key-passphrase mypass

Поддерживаемые форматы ключей: RSA, Ed25519, ECDSA.

Кроссплатформенная поддержка путей:

Платформа Пример пути к ключу Описание
Linux/macOS ~/.ssh/id_rsa Автоматически раскрывается в /home/user/.ssh/id_rsa
Windows ~/.ssh/id_rsa Автоматически раскрывается в C:\Users\username\.ssh\id_rsa
Все платформы Абсолютный путь Используется полный путь напрямую

Конфигурация SFTP сохраняется в поле sftp файла config.json, параметры можно задать через командную строку или интерактивно.

Просмотр информации о версии

sbackup version

Файл конфигурации

Sbackup поддерживает пользовательскую настройку через файл config.json. Файл конфигурации должен находиться в корневой директории проекта.

Описание параметров конфигурации

{
  "compression_format": "ZIP",
  "compression": {
    "algorithm": "ZIP_DEFLATED",
    "level": 6
  },
  "skip_patterns": [".git", "__pycache__"],
  "data_file": "sbackup.json",
  "lang": "zh_CN",
  "password": "",
  "sftp": {
    "host": "",
    "port": 22,
    "user": "",
    "password": "",
    "key_file": "",
    "key_passphrase": "",
    "remote_path": "/",
    "enabled": false
  }
}
Параметр Тип Значение по умолчанию Описание
compression_format string "ZIP" Формат упаковки; допустимые значения: ZIP, TAR, TAR_GZ, TAR_BZ2, TAR_XZ, TAR_ZST, 7Z
compression.algorithm string "ZIP_DEFLATED" Алгоритм сжатия ZIP; допустимые значения: ZIP_DEFLATED, ZIP_STORED, ZIP_BZIP2, ZIP_LZMA
compression.level int 6 Уровень сжатия, диапазон 0-9 (0 -- без сжатия, 9 -- максимальное сжатие)
skip_patterns list [".git", "__pycache__"] Шаблоны игнорируемых файлов или папок (поддержка fnmatch-подстановок и сопоставления путей)
data_file string Путь по умолчанию для платформы Путь к файлу данных стратегий резервного копирования
lang string "zh_CN" Язык интерфейса; допустимые значения: zh_CN, en_US, fr_FR, es_ES, ru_RU, de_DE, ja_JP, pt_BR, ko_KR
password string "" Пароль шифрования для формата 7z
sftp.host string "" Адрес SFTP-сервера
sftp.port int 22 Порт SFTP
sftp.user string "" Имя пользователя SFTP
sftp.password string "" Пароль SFTP (используется при аутентификации по паролю)
sftp.key_file string "" Путь к файлу приватного SSH-ключа (используется при аутентификации по ключу, рекомендуется)
sftp.key_passphrase string "" Парольная фраза ключа (при наличии)
sftp.remote_path string "/" Путь к удалённой директории назначения
sftp.enabled bool false Включить или отключить SFTP

Пример конфигурации

Резервное копирование с высокой степенью сжатия в формате tar.bz2:

{
  "compression_format": "TAR_BZ2",
  "compression_level": 9,
  "skip_patterns": [".git", "__pycache__", "node_modules", "*.log"],
  "data_file": "backup_strategies.json",
  "lang": "zh_CN"
}

Сравнение форматов упаковки

Формат Расширение Степень сжатия Скорость Зависимости Применение
ZIP .zip Средняя Высокая Стандартная библиотека Универсальный, лучшая совместимость с Windows
tar .tar Нет Очень высокая Стандартная библиотека Чистая архивация, для внешнего сжатия
tar.gz .tar.gz Средняя Высокая Стандартная библиотека Универсальный для Linux/macOS
tar.bz2 .tar.bz2 Высокая Средняя Стандартная библиотека Архивация с высокой степенью сжатия
tar.xz .tar.xz Максимальная Низкая Стандартная библиотека Долгосрочное архивирование, экономия места
tar.zst .tar.zst Средне-высокая Очень высокая zstandard Современный формат, баланс скорости и сжатия
7z .7z Очень высокая Низкая py7zr Максимальное сжатие, поддержка шифрования

Удалённое резервное копирование через WebDAV

WebDAV -- это файловый протокол на основе HTTP, поддерживаемый такими сервисами, как Jianguoyun, NextCloud, Synology и другими. Использует стандартную библиотеку Python urllib, без дополнительных зависимостей.

# ============ Быстрый старт ============
# 1. Настроить WebDAV
sbackup webdav config --url https://dav.jianguoyun.com/dav/ --user user@example.com --password secret

# 2. Проверить соединение
sbackup webdav test

# 3. Выполнить резервное копирование и загрузить
sbackup save --webdav

# ============ Сценарии использования ============

# Сценарий 1: Разовое резервное копирование с загрузкой
sbackup save --webdav

# Сценарий 2: Планирование с автоматической загрузкой (каждые 60 минут)
sbackup watch --interval 60 --webdav

# Сценарий 3: Указание удалённой поддиректории
sbackup webdav config --url https://dav.jianguoyun.com/dav/ --user user@example.com --remote-path /backups/sbackup

# Сценарий 4: Одновременная загрузка на SFTP и WebDAV
sbackup save --sftp --webdav

# ============ Типичные адреса WebDAV-сервисов ============
# Jianguoyun: https://dav.jianguoyun.com/dav/
# NextCloud: https://your-server/remote.php/dav/files/username/
# Synology: https://your-synology:5006/webdav/

Подкоманды webdav:

Подкоманда Описание Пример
webdav config Настройка параметров подключения WebDAV (url/user/password/remote_path) sbackup webdav config --url ... --user ...
webdav test Проверка доступности WebDAV-соединения sbackup webdav test
Параметр Значение по умолчанию Описание
--url URL "" Адрес WebDAV-сервера (например, https://dav.jianguoyun.com/dav/)
--user USER "" Имя пользователя WebDAV (обычно адрес электронной почты)
--password PASS "" Пароль WebDAV (для Jianguoyun необходимо сгенерировать пароль приложения в настройках)
--remote-path PATH / Путь к удалённой директории назначения

Принцип работы

Sbackup реализует резервное копирование следующим образом:

  1. Хранение стратегий: стратегии резервного копирования хранятся в файле JSON и содержат пути к папкам, время последнего изменения, пути назначения, шаблоны игнорирования и формат упаковки на уровне элемента.
  2. Инкрементальное копирование: путём сравнения времени последнего изменения папки копируются только изменённые папки.
  3. Множественные форматы сжатия: используются встроенные модули Python zipfile и tarfile, а также сторонние библиотеки zstandard и py7zr для поддержки семи форматов упаковки.
  4. Формат на уровне элемента: каждая стратегия может иметь собственный формат упаковки (add --format), который имеет приоритет над глобальным параметром --format; при отсутствии используется значение по умолчанию.
  5. Очистка бэкапов: после успешного резервного копирования автоматически сканируется целевая директория, файлы сортируются по времени изменения и удаляются старые копии, превышающие лимит хранения.
  6. Шифрование: формат 7z поддерживает шифрование LZMA2 через параметр --password или настройку в config.json.
  7. Планирование: команда watch выполняет резервное копирование в цикле с указанным интервалом, для безопасного выхода используется Ctrl+C.
  8. История бэкапов: после каждого резервного копирования записываются временная метка, размер файла и количество файлов; хранятся последние 100 записей.
  9. Удалённое копирование через SFTP: на базе библиотеки paramiko реализован SFTP-клиент с поддержкой проверки соединения, автоматического создания удалённых директорий и загрузки файлов с индикатором прогресса.

Формат файла данных

{
  "/path/to/source/folder": [
    1719235200.0,
    "/path/to/target/folder",
    [".git", "__pycache__"],
    ""
  ],
  "/path/to/another/folder": [
    1719235200.0,
    "/path/to/another/target",
    [".git"],
    "TAR_GZ"
  ],
  "_history": [
    {
      "time": "2026-05-01T12:00:00",
      "source": "/path/to/source/folder",
      "size_mb": 12.5,
      "files_count": 150
    }
  ]
}

Каждая запись стратегии резервного копирования представляет собой список из 4 элементов: [mtime, target, skip_patterns, compression_format]

Поле Описание
mtime Время последнего изменения исходной папки (для определения необходимости инкрементального копирования)
target Путь к директории для хранения резервных копий
skip_patterns Список шаблонов игнорируемых файлов/папок
compression_format Формат упаковки на уровне элемента (пустая строка означает использование глобального значения по умолчанию)

Руководство для разработчиков

Запуск тестов

uv run coverage run -m unittest discover -s tests -t . && uv run coverage report -m

Структура кода

sbackup/
├── main.py              # Точка входа программы
├── sbackup/
│   ├── __init__.py      # Экспорт основных функций
│   ├── __main__.py      # Точка входа python -m sbackup
│   ├── cli.py           # Разбор аргументов CLI и маршрутизация команд (30+ команд)
│   ├── config.py        # Загрузка конфигурации, шифрование, настройки Webhook/SMTP
│   ├── auto_save.py     # Основной движок BackupManager
│   ├── compression.py   # Движок сжатия/распаковки для 7 форматов
│   ├── i18n.py          # Интернационализация (9 языков)
│   ├── sftp.py          # SFTP-клиент для удалённого копирования (paramiko)
│   ├── webdav.py        # WebDAV-клиент для удалённого копирования (без зависимостей)
│   ├── cloud_storage.py # S3-клиент для облачного хранилища (minio)
│   ├── multi_dest.py    # Параллельное копирование в несколько направлений
│   ├── handlers.py      # Обработчики команд SFTP/WebDAV/Remote/Schedule
│   ├── hooks.py         # Выполнение Pre/Post Hook
│   ├── audit.py         # Система журналирования аудита
│   ├── profile.py       # Управление профилями конфигурации
│   ├── selective.py     # Выборочное восстановление
│   ├── cross_search.py  | Поиск по архивам
│   ├── integrity.py     # Контрольные суммы SHA256
│   ├── rotation.py      # Стратегии ротации резервных копий
│   ├── dryrun.py        # Предварительный просмотр (dry-run)
│   ├── diskcheck.py     # Оценка дискового пространства
│   ├── task_queue.py    # Система очереди задач
│   ├── schema.py        # Валидатор конфигурации
│   ├── benchmark.py     # Бенчмарк сжатия
│   ├── chunked_backup.py# Блочное инкрементальное копирование
│   ├── dedup.py         # Дедупликация файлов по SHA256
│   ├── export.py        # Экспорт метаданных (CSV/JSON)
│   ├── monitor.py       # Мониторинг файловой системы (watchdog)
│   ├── lock.py          # Кроссплатформенная блокировка процессов
│   ├── retry.py         | Повторные попытки с экспоненциальной задержкой
│   ├── ratelimiter.py   | Ограничитель скорости (алгоритм токен-ведра)
│   ├── keychain.py      | Интеграция с системной связкой ключей
│   ├── parity.py        | Корректирующие коды Рида-Соломона
│   ├── completion.py    | Автодополнение для оболочки
│   ├── wizard.py        | Интерактивный мастер настройки
│   └── locales/         # Файлы перевода на 9 языков
└── tests/
    └── sbackup/
        └── test_*.py    # 30 тестовых файлов, покрывающих все модули

Добавление нового функционала

  1. Создайте новый файл модуля в директории sbackup/
  2. Импортируйте функции нового модуля в sbackup/__init__.py
  3. Добавьте обработку новой команды в функцию run()
  4. Добавьте соответствующий тестовый файл в директорию tests/

Часто задаваемые вопросы

В: Что делать, если файл стратегий резервного копирования был случайно удалён?

О: Стратегии хранятся в файле данных. Если файл был удалён, просто заново добавьте стратегии с помощью команды add.

В: Как изменить ранее добавленную стратегию?

О: Используйте команду sbackup edit: sbackup edit <source> --dest <new_dest> --ignore <patterns> --format <fmt>.

В: Поддерживается ли удалённое резервное копирование?

О: Да! Предоставляются три способа удалённого копирования:

  • SFTP: настройка через sbackup sftp config, загрузка через sbackup save --sftp
  • WebDAV: настройка через sbackup webdav config, загрузка через sbackup save --webdav (поддержка Jianguoyun/NextCloud/Synology)
  • Облачное хранилище S3: настройка поля cloud в config.json, загрузка через sbackup save --cloud
  • Можно включить несколько способов одновременно: sbackup save --sftp --webdav --cloud

В: В чём разница между tar.gz и ZIP?

О: tar.gz чаще используется в Linux/macOS и обеспечивает немного лучшее сжатие; ZIP более универсален на Windows и обладает лучшей совместимостью. tar.bz2 и tar.xz обеспечивают более высокую степень сжатия, но работают медленнее. tar.zst -- современный алгоритм с высокой скоростью и хорошим сжатием. 7z обеспечивает максимальное сжатие и поддерживает шифрование.

В: Как зашифровать резервную копию?

О: Используйте формат 7z с паролем: uv run python main.py --format 7z save --password yourpassword. Пароль также можно указать в поле password файла config.json.

В: Как автоматически очищать старые резервные копии?

О: Используйте параметр --keep: uv run python main.py save --keep 5 сохранит только 5 последних резервных копий. При планировании тоже поддерживается: uv run python main.py watch --interval 60 --keep 10.

В: Как настроить автоматическое резервное копирование по расписанию?

О: Используйте команду watch: uv run python main.py watch --interval 60 -- резервное копирование каждые 60 минут. Нажмите Ctrl+C для остановки.

В: Безопасно ли хранение паролей?

О: Пароли SFTP и шифрования 7z в файле config.json хранятся в открытом виде. Убедитесь, что доступ к файлу config.json имеют только доверенные пользователи (например, chmod 600 config.json). Не добавляйте файл config.json, содержащий пароли, в систему контроля версий.

Руководство по участию в разработке

Приветствуются Issues и Pull Requests!

  1. Сделайте форк репозитория
  2. Создайте ветку для новой функции (git checkout -b feature/AmazingFeature)
  3. Внесите изменения (git commit -m 'Add some AmazingFeature')
  4. Отправьте в ветку (git push origin feature/AmazingFeature)
  5. Создайте Pull Request

Стиль кодирования

Проект следует стандартам PEP 8 и Google Python Style Guide. Убедитесь, что ваш код:

  • Использует аннотации типов
  • Следует Google-стилю docstrings
  • Проходит все модульные тесты

Лицензия

Проект распространяется под лицензией GNU GPL v3.0. Подробности см. в файле LICENSE.

Автор

xiatianxuan (CodeSeed)

Благодарности

Связь с нами

По вопросам и предложениям обращайтесь по электронной почте: xiatianxuan2025@163.com


Последнее обновление: 19 июня 2026 г.