Files
xiatianxuan 8f2bcdf8fa v2.0.0: 多目标备份 + S3云存储 + 完整性校验 + 9语言国际化
feat: v2.0.0 — 多目标备份 + S3云存储 + 审计日志 + 9语言国际化
2026-06-20 14:01:43 +08:00

29 KiB

Sbackup

Python License PyPI Tests Platform

Leichtgewichtiges, effizientes Ordner-Backup-Tool mit Kommandozeilenunterstuetzung zur einfachen Verwaltung Ihrer Backup-Strategien.

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


Ueberblick

Sbackup ist ein leichtgewichtiges Ordner-Backup-Tool, mit dem Sie Backup-Strategien ueber die Kommandozeile hinzufuegen, loeschen und anzeigen koennen. Es basiert auf dem letzten Aenderungszeitpunkt eines Ordners, um zu entscheiden, ob ein Backup erforderlich ist, und stellt sicher, dass Ihre Daten stets aktuell bleiben.

Funktionen

  • Inkrementelles Backup: Nur geaenderte Ordner werden gesichert, was Zeit und Speicherplatz spart
  • Mehrere Formate: Unterstuetzt ZIP, tar, tar.gz, tar.bz2, tar.xz, tar.zst und 7z -- sieben Packformate, global und pro Eintrag unabhaengig konfigurierbar
  • SFTP-Remote-Backup: Basierend auf paramiko, unterstuetzt Passwort-/SSH-Schluessel-Authentifizierung mit automatischer Erkennung des Standardschluessels
  • WebDAV-Remote-Backup: Basierend auf der Standardbibliothek urllib, ohne zusaetzliche Abhaengigkeiten, unterstuetzt Jianguoyun/NextCloud/Synology
  • S3-Cloud-Speicher: Basierend auf minio, unterstuetzt alle S3-kompatiblen Speicher (AWS/MinIO/Alibaba Cloud OSS usw.)
  • Parallel-Backup auf mehrere Ziele: Simultane Sicherung auf lokale und mehrere Remote-Ziele, unabhaengig voneinander
  • Backup-Wiederherstellung: Entpacken und Wiederherstellen aus Backup-Dateien in ein angegebenes Verzeichnis, mit selektiver Wiederherstellung
  • Backup-Bereinigung: Automatisches Loeschen alter Backups mit Strategien nach Anzahl/Zeit taeglicher Aufbewahrung
  • Verschluesselte Backups: Passwortverschluesselung fuer 7z-Format und PBKDF2-Verschluesselung fuer alle Formate
  • Zeitgesteuerte Backups: Intervallgesteuerte automatische Ausfuehrung, unterstuetzt Echtzeit-Dateiueberwachung (watchdog)
  • Backup-Verlauf: Protokollierung von Zeitpunkt, Groesse und SHA256-Pruefsumme jedes Backups zur Nachverfolgung
  • Audit-Protokoll: Protokollierung aller Backup-/Wiederherstellungsereignisse
  • Pre-/Post-Hooks: Ausfuehren von benutzerdefinierten Befehlen vor und nach dem Backup
  • Konfigurationsprofile: Speichern, Umschalten, Importieren und Exportieren mehrerer Konfigurationen
  • Suche ueber Archive hinweg: Dateinamenssuche in mehreren Backup-Dateien
  • Datenintegritaet: SHA256-Pruefsummen-Erzeugung und -Verifizierung, Reed-Solomon-Fehlerkorrektur
  • Konfigurationsvalidierung: Automatische Pruefung der Konfigurationsparameter, Erkennung von Manipulationen
  • Aufgabenwarteschlange: Verwaltung von Backup-Aufgaben mit Hinzufuegen, Ausfuehren und Abbrechen
  • Komprimierungs-Benchmark: Vergleich der Komprimierungsleistung verschiedener Formate und Stufen
  • Speicherplatz-Schaetzung: Backup-Groessenschaetzung nach Dateityp, Pruefung des Zielplatzes
  • Internationalisierung: Unterstuetzt Chinesisch, Englisch, Franzoesisch, Spanisch, Russisch, Deutsch, Japanisch, Portugiesisch und Koreanisch
  • Shell-Autovervollstaendigung: Unterstuetzt bash/zsh/fish/powershell
  • Leichtgewichtig und effizient: Kleine Dateigroesse, schneller Start, geringer Ressourcenverbrauch
  • Plattformuebergreifend: Unterstuetzt Windows, macOS und Linux

Schnellstart

Installation

Installation mit pip

pip install sbackup-cli

Nach der Installation verwenden Sie den Befehl sbackup (PyPI-Paketname: sbackup-cli, CLI-Befehl: sbackup).

Installation aus dem Quellcode

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

Verwendung

Grundlegende Syntax

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

Verfuegbare Befehle

Befehl Beschreibung
add Backup-Strategie hinzufuegen
rm / remove Backup-Strategie loeschen
edit Vorhandene Backup-Strategie bearbeiten
all Alle Backup-Strategien anzeigen
save Backup ausfuehren
watch Backup zeitgesteuert ausfuehren
restore Aus Backup-Datei wiederherstellen
info Details einer Backup-Datei anzeigen
diff Quellverzeichnis mit Backup vergleichen
verify Integritaet der Backup-Datei pruefen
search Dateien im Backup suchen
xsearch Suche ueber mehrere Backup-Archive
versions Backup-Versionsverlauf anzeigen
sftp SFTP-Remote-Backup verwalten
webdav WebDAV-Remote-Backup verwalten
remote Remote-Dateiverwaltung (list/rm)
task Backup-Aufgabenwarteschlange verwalten
audit Audit-Protokoll abfragen
hooks Pre-/Post-Hooks manuell ausfuehren
profile Konfigurationsprofile verwalten
rotate Backup-Rotation und Bereinigung
clean Alte Backups bereinigen
diskcheck Speicherplatz-Schaetzung
benchmark Komprimierungsformat-Benchmark
integrity Integritaetspruefung des Backup-Verzeichnisses
dry-run Vorschau der Backup-Dateiauswahl
export / import Backup-Strategien exportieren/importieren
ignore .sbackupignore-Datei erstellen
schedule Zeitgesteuerte Konfiguration exportieren
webhook Webhook-Voreinstellungen konfigurieren
config Konfiguration verschluesseln/pruefen
report Backup-Bericht erstellen
completion Shell-Autovervollstaendigungsskript erzeugen
wizard Interaktiver Konfigurationsassistent
status Backup-Status-Dashboard
version Versionsinformationen anzeigen
help Hilfe anzeigen

Globale Parameter

Parameter Beschreibung
--lang zh_CN / en_US / fr_FR / es_ES / ru_RU / de_DE / ja_JP / pt_BR / ko_KR Oberflaechensprache festlegen (wird in config.json gespeichert)
--format zip / tar / tar.gz / tar.bz2 / tar.xz / tar.zst / 7z Packformat festlegen (wird in config.json gespeichert)
--debug Debug-Protokollierung aktivieren

Backup-Strategie hinzufuegen

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

Parameter:

  • source: Pfad des zu sichernden Quellordners
  • dest: Pfad fuer die Ablage der Backup-Dateien
  • -i, --ignore: Zu ignorierende Datei- oder Ordnernamen, kommagetrennt (Standard: .git,__pycache__)
  • --format: Packformat pro Eintrag (gilt nur fuer diese Strategie, Standardwert wird verwendet, wenn nicht angegeben): zip / tar / tar.gz / tar.bz2 / tar.xz / tar.zst / 7z

Beispiele:

# Strategie mit globalem Standardformat hinzufuegen
uv run python main.py add F:/my_folder F:/backup -i node_modules,.git

# Tar.gz-Format fuer diese Strategie festlegen (jedes Backup dieses Ordners verwendet tar.gz)
uv run python main.py add F:/my_folder F:/backup --format tar.gz

# 7z-Format festlegen (nur fuer diesen Ordner)
uv run python main.py add F:/my_folder F:/backup --format 7z

Backup-Strategie loeschen

uv run python main.py rm <path>

Parameter:

  • path: Pfad des Quellordners, dessen Backup-Strategie geloescht werden soll

Beispiel:

uv run python main.py rm F:/my_folder

Alle Backup-Strategien anzeigen

uv run python main.py all

Zeigt alle aktuell konfigurierten Backup-Strategien an.

Backup ausfuehren

# Mit Standardformat (ZIP)
uv run python main.py save

# Mit tar.gz-Format
uv run python main.py --format tar.gz save

# Die letzten 5 Backup-Dateien aufbewahren, alte automatisch bereinigen
uv run python main.py save --keep 5

# Mit 7z-Format und Verschluesselung
uv run python main.py --format 7z save --password mysecret

# Englische Oberflaeche + tar.xz-Format
uv run python main.py --lang en_US --format tar.xz save

Parameter fuer den Befehl save:

Parameter Standardwert Beschreibung
--keep N 0 Die letzten N Backup-Dateien aufbewahren, 0 bedeutet keine Bereinigung
--password PASSWORT "" Verschluesselungspasswort (nur fuer 7z-Format)
--sftp false Nach dem Backup auf SFTP-Server hochladen
--webdav false Nach dem Backup auf WebDAV-Server hochladen

Gemaess der Backup-Strategie werden geaenderte Ordner automatisch gesichert.

Zeitgesteuertes Backup

# Alle 60 Minuten ein Backup ausfuehren
uv run python main.py watch --interval 60

# Alle 2 Stunden mit Aufbewahrung der letzten 10 Dateien
uv run python main.py watch --interval 120 --keep 10

# Zeitgesteuertes Backup + 7z-Verschluesselung
uv run python main.py --format 7z watch --interval 60 --password mysecret

Parameter fuer den Befehl watch:

Parameter Standardwert Beschreibung
--interval MINUTEN 60 Backup-Intervall in Minuten
--keep N 0 Die letzten N Backup-Dateien aufbewahren
--password PASSWORT "" Verschluesselungspasswort (nur fuer 7z-Format)
--sftp false Nach jedem Backup auf SFTP-Server hochladen
--webdav false Nach jedem Backup auf WebDAV-Server hochladen

Mit Ctrl+C wird das zeitgesteuerte Backup gestoppt.

Backup wiederherstellen

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

Parameter:

  • backup_file: Pfad zur Backup-Datei (unterstuetzt .zip / .tar / .tar.gz / .tar.bz2 / .tar.xz / .tar.zst / .7z)
  • target_dir: Zielverzeichnis fuer die Wiederherstellung

Beispiele:

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-Remote-Backup

# ============ Schnellstart (empfohlen) ============
# 1. SFTP konfigurieren (automatische SSH-Schluessel-Erkennung, keine manuelle Angabe noetig)
sbackup sftp config --host 192.168.1.100 --user admin --remote-path /backups

# 2. Verbindung testen
sbackup sftp test

# 3. Backup ausfuehren und hochladen
sbackup save --sftp

# ============ Authentifizierungsmethoden ============

# Methode 1: Automatische Schluessel-Erkennung (empfohlen)
# Das System versucht automatisch ~/.ssh/id_ed25519 -> id_rsa -> id_ecdsa
sbackup sftp config --host 192.168.1.100 --user admin

# Methode 2: Passwort-Authentifizierung
sbackup sftp config --host 192.168.1.100 --user admin --password secret

# Methode 3: Bestimmten Schluessel angeben
sbackup sftp config --host 192.168.1.100 --user admin --key-file ~/.ssh/id_rsa

# Methode 4: Schluessel + Passphrase (interaktive Eingabe)
sbackup sftp config --host 192.168.1.100 --user admin --key-file ~/.ssh/id_rsa

# Methode 5: Schluessel + Passphrase (Kommandozeile)
sbackup sftp config --host 192.168.1.100 --user admin --key-file ~/.ssh/id_rsa --key-passphrase mykeypass

# ============ Anwendungsszenarien ============

# Szenario 1: Einmaliges Backup mit Hochladen
sbackup save --sftp

# Szenario 2: Zeitgesteuertes Backup mit automatischem Hochladen (alle 60 Minuten)
sbackup watch --interval 60 --sftp

# Szenario 3: Bestimmtes Format + Hochladen
sbackup --format tar.gz save --sftp

# Szenario 4: Verschluesseltes Backup + Hochladen
sbackup --format 7z save --password mysecret --sftp

# Szenario 5: Aufbewahrung der letzten 5 Backups + Hochladen
sbackup save --keep 5 --sftp

# ============ Erweiterte Verwendung ============

# Interaktive Konfiguration (alle Parameter schrittweise eingeben)
sbackup sftp config

# Nicht-interaktive Konfiguration (alle Parameter in der Kommandozeile)
sbackup sftp config --host 192.168.1.100 --port 22 --user admin --password secret --remote-path /backups

# Verbindung testen mit detailliertem Protokoll
sbackup --debug sftp test

sftp-Unterbefehle:

Unterbefehl Beschreibung Beispiel
sftp config SFTP-Verbindungsparameter konfigurieren (host/port/user/password/key_file/key_passphrase/remote_path) sbackup sftp config --host 192.168.1.100 --user admin
sftp test SFTP-Verbindung testen sbackup sftp test

Authentifizierungsmethoden:

Methode Parameter Beschreibung Beispiel
Automatische Erkennung Keine Authentifizierungsparameter angeben Versucht automatisch ~/.ssh/id_ed25519 -> id_rsa -> id_ecdsa (empfohlen) sbackup sftp config --host ... --user ...
Passwort --password Direkt mit Passwort anmelden sbackup sftp config --host ... --user ... --password secret
Schluessel --key-file Mit angegebenem SSH-Schluessel anmelden sbackup sftp config --host ... --user ... --key-file ~/.ssh/id_rsa
Schluessel + Passphrase --key-file + --key-passphrase Wenn der Schluessel eine Passphrase hat sbackup sftp config --host ... --user ... --key-file ~/.ssh/id_rsa --key-passphrase mypass

Unterstuetzte Schluesselformate: RSA, Ed25519, ECDSA.

Plattformuebergreifende Pfadunterstuetzung:

Plattform Beispiel Schluesselpfad Beschreibung
Linux/macOS ~/.ssh/id_rsa Wird automatisch zu /home/user/.ssh/id_rsa aufgeloest
Windows ~/.ssh/id_rsa Wird automatisch zu C:\Users\username\.ssh\id_rsa aufgeloest
Alle Plattformen Absoluter Pfad Vollstaendiger Pfad wird direkt verwendet

Die SFTP-Konfiguration wird im Feld sftp der Datei config.json gespeichert und unterstuetzt Kommandozeilenparameter oder interaktive Eingabe.

Versionsinformationen anzeigen

sbackup version

Konfigurationsdatei

Sbackup unterstuetzt benutzerdefinierte Konfiguration ueber die Datei config.json. Die Konfigurationsdatei liegt im Projektstammverzeichnis.

Konfigurationsparameter

{
  "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
  }
}
Parameter Typ Standardwert Beschreibung
compression_format string "ZIP" Packformat, Auswahl: ZIP, TAR, TAR_GZ, TAR_BZ2, TAR_XZ, TAR_ZST, 7Z
compression.algorithm string "ZIP_DEFLATED" ZIP-Komprimierungsalgorithmus, Auswahl: ZIP_DEFLATED, ZIP_STORED, ZIP_BZIP2, ZIP_LZMA
compression.level int 6 Komprimierungsstufe, Bereich 0-9 (0 = keine Komprimierung, 9 = hoechste Komprimierung)
skip_patterns list [".git", "__pycache__"] Zu ignorierende Datei-/Ordnermuster (unterstuetzt fnmatch-Platzhalter und Pfadabgleich)
data_file string Plattform-Standardpfad Pfad zur Datei mit den Backup-Strategien
lang string "zh_CN" Oberflaechensprache, Auswahl: zh_CN, en_US, fr_FR, es_ES, ru_RU, de_DE, ja_JP, pt_BR, ko_KR
password string "" Verschluesselungspasswort fuer 7z
sftp.host string "" SFTP-Serveradresse
sftp.port int 22 SFTP-Port
sftp.user string "" SFTP-Benutzername
sftp.password string "" SFTP-Passwort (fuer Passwort-Authentifizierung)
sftp.key_file string "" Pfad zur SSH-Schluesseldatei (fuer Schluessel-Authentifizierung, empfohlen)
sftp.key_passphrase string "" Schluessel-Passphrase (falls vorhanden)
sftp.remote_path string "/" Remote-Zielpfad
sftp.enabled bool false SFTP aktivieren oder nicht

Konfigurationsbeispiel

Backup mit dem tar.bz2-Format und hoher Komprimierung:

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

Vergleich der Packformate

Format Dateiendung Komprimierung Geschwindigkeit Abhaengigkeit Anwendungsfall
ZIP .zip Mittel Schnell Standardbibliothek Universell, beste Windows-Kompatibilitaet
tar .tar Keine Sehr schnell Standardbibliothek Reines Archiv, fuer externe Komprimierung
tar.gz .tar.gz Mittel Schnell Standardbibliothek Linux/macOS Standard
tar.bz2 .tar.bz2 Hoch Mittel Standardbibliothek Hochkomprimierte Archive
tar.xz .tar.xz Am hoechsten Langsam Standardbibliothek Langzeitarchivierung, platzsparend
tar.zst .tar.zst Mittel-hoch Sehr schnell zstandard Modern, gute Balance zwischen Geschwindigkeit und Kompression
7z .7z Sehr hoch Langsam py7zr Hoechste Kompression, unterstuetzt Verschluesselung

WebDAV-Remote-Backup

WebDAV ist ein HTTP-basiertes Dateiprotokoll, das Jianguoyun, NextCloud, Synology und andere gaengige Cloud-Speicher unterstuetzt. Verwendet die Python-Standardbibliothek urllib -- keine zusaetzlichen Abhaengigkeiten.

# ============ Schnellstart ============
# 1. WebDAV konfigurieren
sbackup webdav config --url https://dav.jianguoyun.com/dav/ --user user@example.com --password secret

# 2. Verbindung testen
sbackup webdav test

# 3. Backup ausfuehren und hochladen
sbackup save --webdav

# ============ Anwendungsszenarien ============

# Szenario 1: Einmaliges Backup mit Hochladen
sbackup save --webdav

# Szenario 2: Zeitgesteuertes Backup mit automatischem Hochladen (alle 60 Minuten)
sbackup watch --interval 60 --webdav

# Szenario 3: Remote-Unterverzeichnis angeben
sbackup webdav config --url https://dav.jianguoyun.com/dav/ --user user@example.com --remote-path /backups/sbackup

# Szenario 4: Simultanes Hochladen auf SFTP und WebDAV
sbackup save --sftp --webdav

# ============ Gaengige WebDAV-Adressen ============
# Jianguoyun: https://dav.jianguoyun.com/dav/
# NextCloud: https://your-server/remote.php/dav/files/username/
# Synology: https://your-synology:5006/webdav/

webdav-Unterbefehle:

Unterbefehl Beschreibung Beispiel
webdav config WebDAV-Verbindungsparameter konfigurieren (url/user/password/remote_path) sbackup webdav config --url ... --user ...
webdav test WebDAV-Verbindung testen sbackup webdav test
Parameter Standardwert Beschreibung
--url URL "" WebDAV-Serveradresse (z.B. https://dav.jianguoyun.com/dav/)
--user BENUTZER "" WebDAV-Benutzername (in der Regel E-Mail-Adresse)
--password PASSWORT "" WebDAV-Passwort (fuer Jianguoyun muss in den Einstellungen ein App-Passwort generiert werden)
--remote-path PFAD / Remote-Zielpfad

Funktionsweise

Sbackup realisiert die Backup-Funktionalitaet auf folgende Weise:

  1. Backup-Strategie-Speicherung: Backup-Strategien werden in einer JSON-Datei gespeichert, die Ordnerpfade, letzte Aenderungszeiten, Zielpfade, Ignoriermuster und packformat pro Eintrag enthaelt.
  2. Inkrementelles Backup: Durch Vergleich des letzten Aenderungszeitpunkts eines Ordners werden nur geaenderte Ordner gesichert.
  3. Multiformat-Komprimierung: Verwendet Pythons eingebaute zipfile- und tarfile-Module sowie die Drittanbieter-Bibliotheken zstandard und py7zr fuer sieben Packformate.
  4. Format pro Eintrag: Jede Backup-Strategie kann ein eigenes Packformat angeben (add --format), das Vorrang vor dem globalen --format hat. Ohne Angabe wird der globale Standard verwendet.
  5. Backup-Bereinigung: Nach erfolgreichem Backup wird das Zielverzeichnis automatisch gescannt, nach Aenderungszeitpunkt sortiert und alte Dateien werden ueber die Aufbewahrungsanzahl hinaus geloescht.
  6. Verschluesseltes Backup: Das 7z-Format unterstuetzt LZMA2-Verschluesselung ueber den --password-Parameter oder die config.json-Konfiguration.
  7. Zeitgesteuertes Backup: Der watch-Befehl fuehrt in einer Schleife in angegebenen Intervallen Backups aus. Ctrl+C beendet sicher.
  8. Backup-Verlauf: Nach jedem Backup werden Zeitstempel, Dateigroesse und Dateianzahl protokolliert. Es werden die letzten 100 Eintraege aufbewahrt.
  9. SFTP-Remote-Backup: Basierend auf der paramiko-Bibliothek als SFTP-Client, unterstuetzt Verbindungstests, automatische Erstellung von Remote-Verzeichnissen und Datei-Upload mit Fortschrittsanzeige.

Datenformat der Datei

{
  "/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
    }
  ]
}

Jeder Backup-Strategie-Eintrag ist eine 4-Element-Liste: [mtime, target, skip_patterns, compression_format]

Feld Beschreibung
mtime Letzter Aenderungszeitpunkt des Quellordners (fuer inkrementelle Backup-Entscheidung)
target Zielpfad fuer die Backup-Dateien
skip_patterns Liste der zu ignorierenden Datei-/Ordnermuster
compression_format Packformat pro Eintrag (leerer String bedeutet globaler Standard)

Entwicklerhandbuch

Tests ausfuehren

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

Code-Struktur

sbackup/
├── main.py              # Programmeinstieg
├── sbackup/
│   ├── __init__.py      # Export der Kernfunktionen
│   ├── __main__.py      # python -m sbackup Einstieg
│   ├── cli.py           # CLI-Argument-Parser und Befehlsverteilung (30+ Befehle)
│   ├── config.py        # Konfigurationslade, Verschluesselung, Webhook-/SMTP-Konfiguration
│   ├── auto_save.py     # BackupManager Kern-Engine
│   ├── compression.py   # Komprimierung/Dekomprimierung fuer 7 Formate
│   ├── i18n.py          # Internationalisierung (9 Sprachen)
│   ├── sftp.py          # SFTP-Remote-Backup-Client (paramiko)
│   ├── webdav.py        # WebDAV-Remote-Backup-Client (ohne Abhaengigkeiten)
│   ├── cloud_storage.py # S3-Cloud-Speicher-Client (minio)
│   ├── multi_dest.py    # Parallel-Backup auf mehrere Ziele
│   ├── handlers.py      # SFTP-/WebDAV-/Remote-/Schedule-Befehlsverarbeitung
│   ├── hooks.py         # Pre-/Post-Hook-Ausfuehrung
│   ├── audit.py         # Audit-Protokollsystem
│   ├── profile.py       # Konfigurationsprofil-Verwaltung
│   ├── selective.py     # Selektive Wiederherstellung
│   ├── cross_search.py  | Suche ueber Archive hinweg
│   ├── integrity.py     # SHA256-Pruefsumme
│   ├── rotation.py      # Backup-Rotationsstrategie
│   ├── dryrun.py        # Dry-run-Vorschau
│   ├── diskcheck.py     # Speicherplatz-Schaetzung
│   ├── task_queue.py    # Aufgabenwarteschlangensystem
│   ├── schema.py        # Konfigurationsvalidierer
│   ├── benchmark.py     # Komprimierungs-Benchmark
│   ├── chunked_backup.py# Blockweise inkrementelle Sicherung
│   ├── dedup.py         # Dateiweise SHA256-Deduplizierung
│   ├── export.py        # Metadaten-Export (CSV/JSON)
│   ├── monitor.py       # watchdog Dateisystemueberwachung
│   ├── lock.py          # Plattformuebergreifende Prozesssperre
│   ├── retry.py         | Exponentielle Wiederholung mit Backoff
│   ├── ratelimiter.py   # Token-Bucket-Ratenbegrenzung
│   ├── keychain.py      # System-Keychain-Integration
│   ├── parity.py        # Reed-Solomon-Fehlerkorrektur
│   ├── completion.py    # Shell-Autovervollstaendigung
│   ├── wizard.py        # Interaktiver Konfigurationsassistent
│   └── locales/         # Uebersetzungsdateien fuer 9 Sprachen
└── tests/
    └── sbackup/
        └── test_*.py    # 30 Testdateien, alle Module abdeckend

Neue Funktionen hinzufuegen

  1. Erstellen Sie eine neue Moduldatei im sbackup/-Verzeichnis
  2. Importieren Sie die neuen Funktionen in sbackup/__init__.py
  3. Fuegen Sie die Verarbeitungslogik fuer den neuen Befehl in der run()-Funktion hinzu
  4. Erstellen Sie die entsprechende Testdatei im tests/-Verzeichnis

Haeufig gestellte Fragen

Q: Was passiert, wenn die Backup-Strategie-Datei versehentlich geloescht wird?

A: Die Backup-Strategien werden in der Datendatei gespeichert. Bei versehentlicher Loeschung koennen die Strategien mit dem add-Befehl erneut hinzugefuegt werden.

Q: Wie kann eine vorhandene Backup-Strategie geaendert werden?

A: Verwenden Sie den Befehl sbackup edit: sbackup edit <source> --dest <new_dest> --ignore <patterns> --format <fmt>.

Q: Werden Remote-Backups unterstuetzt?

A: Ja! Es werden drei Remote-Backup-Methoden angeboten:

  • SFTP: sbackup sftp config konfigurieren, sbackup save --sftp hochladen
  • WebDAV: sbackup webdav config konfigurieren, sbackup save --webdav hochladen (unterstuetzt Jianguoyun/NextCloud/Synology)
  • S3-Cloud-Speicher: Das Feld cloud in config.json konfigurieren, sbackup save --cloud hochladen
  • Mehrere Methoden gleichzeitig: sbackup save --sftp --webdav --cloud

Q: Was ist der Unterschied zwischen tar.gz und ZIP?

A: tar.gz wird auf Linux/macOS haeufiger verwendet und bietet eine etwas bessere Kompression. ZIP ist auf Windows gaengiger und hat die beste Kompatibilitaet. tar.bz2 und tar.xz bieten hoehere Kompression, sind aber langsamer. tar.zst ist ein moderner Algorithmus mit sehr hoher Geschwindigkeit und guter Kompression. 7z bietet die hoechste Kompression und unterstuetzt Verschluesselung.

Q: Wie werden Backups verschluesselt?

A: Verwenden Sie das 7z-Format mit Passwort: uv run python main.py --format 7z save --password yourpassword. Das Passwort kann auch im Feld password der config.json hinterlegt werden.

Q: Wie werden alte Backups automatisch bereinigt?

A: Verwenden Sie den Parameter --keep: uv run python main.py save --keep 5 bewahrt nur die letzten 5 Backup-Dateien auf. Bei zeitgesteuerten Backups ebenfalls unterstuetzt: uv run python main.py watch --interval 60 --keep 10.

Q: Wie richtet man zeitgesteuerte Backups ein?

A: Verwenden Sie den Befehl watch: uv run python main.py watch --interval 60 fuehrt alle 60 Minuten ein Backup aus. Mit Ctrl+C wird gestoppt.

Q: Ist die Passwortspeicherung sicher?

A: Die SFTP-Passwoerter und 7z-Verschluesselungspasswoerter in config.json werden im Klartext gespeichert. Stellen Sie sicher, dass der Zugriff auf die Datei config.json auf vertrauenswuerdige Benutzer beschraenkt ist (z.B. chmod 600 config.json). Fuegen Sie eine config.json mit Passwoertern nicht in ein Versionskontrollsystem ein.

Mitwirkungsrichtlinie

Issues und Pull Requests sind willkommen!

  1. Forken Sie dieses Repository
  2. Erstellen Sie Ihren Feature-Branch (git checkout -b feature/AmazingFeature)
  3. Committen Sie Ihre Aenderungen (git commit -m 'Add some AmazingFeature')
  4. Pushen Sie auf den Branch (git push origin feature/AmazingFeature)
  5. Erstellen Sie einen Pull Request

Codestil

Dieses Projekt folgt PEP 8 und dem Google Python Style Guide. Bitte stellen Sie sicher, dass Ihr Code:

  • Typannotationen verwendet
  • Google-stile Docstrings einhaelt
  • Alle Tests besteht

Lizenz

Dieses Projekt steht unter der GNU GPL v3.0-Lizenz. Einzelheiten finden Sie in der Datei LICENSE.

Autor

xiatianxuan (CodeSeed)

Besonderer Dank

Kontakt

Bei Fragen oder Anregungen senden Sie bitte eine E-Mail an: xiatianxuan2025@163.com


Letzte Aktualisierung: 19. Juni 2026