rcloning_param.sh aktualisiert
This commit is contained in:
@ -10,7 +10,6 @@ source "$GIT_PFAD/logger/logger.sh"
|
|||||||
LOGBUCH="$GIT_PFAD/logger/Logs/rcloning.log"
|
LOGBUCH="$GIT_PFAD/logger/Logs/rcloning.log"
|
||||||
log_init "$LOGBUCH"
|
log_init "$LOGBUCH"
|
||||||
log_start
|
log_start
|
||||||
echo "Datei ./rclone.exclude wird beachtet."
|
|
||||||
|
|
||||||
# --- Parameter-Auswertung ---
|
# --- Parameter-Auswertung ---
|
||||||
usage() {
|
usage() {
|
||||||
@ -40,15 +39,54 @@ if [ "$MODUS" != "sync" ] && [ "$MODUS" != "copy" ]; then
|
|||||||
usage
|
usage
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Prüfen ob ZIEL ein rclone-Remote ist (Muster: "remotename:/pfad")
|
||||||
|
if ! echo "$ZIEL" | grep -qE '^[A-Za-z0-9_][A-Za-z0-9_.-]*:'; then
|
||||||
|
log_error "Fehler: ZIEL '$ZIEL' ist kein gültiger rclone-Remote. Erwartet: 'remotename:/pfad'."
|
||||||
|
log_error "Hinweis: Als ZIEL sind nur rclone-Remotes erlaubt (wegen --backup-dir)."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Erreichbarkeit des Remotes testen
|
||||||
|
log_info "Prüfe Erreichbarkeit von ZIEL: $ZIEL"
|
||||||
|
if ! rclone lsd "$ZIEL" > /dev/null 2>&1; then
|
||||||
|
log_error "Fehler: ZIEL '$ZIEL' ist nicht erreichbar. Remote offline oder Pfad ungültig."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
log_info "ZIEL erreichbar."
|
||||||
|
|
||||||
# --- Einstellungen ---
|
# --- Einstellungen ---
|
||||||
IST_TEST="nein" # ja: es wird nichts übertragen
|
IST_TEST="nein" # ja: es wird nichts übertragen
|
||||||
Archivordner="$(date +%Y-%m-%d-%H)"
|
Archivordner="$(date +%y-%m-%d-%H)"
|
||||||
ZIEL_CLEAN="${ZIEL%/}" # Trailing Slash entfernen
|
ZIEL_CLEAN="${ZIEL%/}" # Trailing Slash entfernen
|
||||||
ARCHIV="${ZIEL_CLEAN}_Archiv/$Archivordner"
|
ARCHIV="${ZIEL_CLEAN}_Archiv/$Archivordner"
|
||||||
# Ergibt z. B.: spzssh:/srv/.../DPVonNextcloud_Archiv/25-03-26-14
|
# Ergibt z. B.: spzssh:/srv/.../DPVonNextcloud_Archiv/25-03-26-14
|
||||||
LOGLVL="INFO" # Möglich: DEBUG, INFO, ERROR, NOTICE
|
LOGLVL="INFO" # Möglich: DEBUG, INFO, ERROR, NOTICE
|
||||||
IGNORE="" # leeren, wenn nicht ignoriert werden soll
|
IGNORE="" # leeren, wenn nicht ignoriert werden soll
|
||||||
EXCLUDE=".git/" # Auszuschließende Dateien und Verzeichnisse
|
EXCLUDE="--exclude=.git/" # Fest ausgeschlossene Pfade
|
||||||
|
|
||||||
|
# rclone.ignore aus QUELLE laden (lokal oder Remote)
|
||||||
|
EXCLUDE_FROM=""
|
||||||
|
TMP_IGNORE=""
|
||||||
|
if echo "$QUELLE" | grep -qE '^[A-Za-z0-9_][A-Za-z0-9_.-]*:'; then
|
||||||
|
# QUELLE ist ein Remote → Datei temporär herunterladen
|
||||||
|
TMP_IGNORE="$(mktemp)"
|
||||||
|
if rclone copyto "$QUELLE/rclone.ignore" "$TMP_IGNORE" 2>/dev/null; then
|
||||||
|
EXCLUDE_FROM="--exclude-from=$TMP_IGNORE"
|
||||||
|
log_info "rclone.ignore von Remote geladen: $QUELLE/rclone.ignore"
|
||||||
|
else
|
||||||
|
log_info "Keine rclone.ignore in Quelle gefunden, wird übersprungen."
|
||||||
|
rm -f "$TMP_IGNORE"
|
||||||
|
TMP_IGNORE=""
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# QUELLE ist lokal → direkt prüfen
|
||||||
|
if [ -f "$QUELLE/rclone.ignore" ]; then
|
||||||
|
EXCLUDE_FROM="--exclude-from=$QUELLE/rclone.ignore"
|
||||||
|
log_info "rclone.ignore gefunden: $QUELLE/rclone.ignore"
|
||||||
|
else
|
||||||
|
log_info "Keine rclone.ignore in Quelle gefunden, wird übersprungen."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# --- Programm ---
|
# --- Programm ---
|
||||||
log_info "Starte Cloning..."
|
log_info "Starte Cloning..."
|
||||||
@ -63,21 +101,26 @@ log_info "Quelle: $QUELLE --> Ziel: $ZIEL"
|
|||||||
log_info "Archiv: $ARCHIV"
|
log_info "Archiv: $ARCHIV"
|
||||||
log_info "Modus: $MODUS"
|
log_info "Modus: $MODUS"
|
||||||
log_info "Log-Level: $LOGLVL"
|
log_info "Log-Level: $LOGLVL"
|
||||||
log_info "Ignoriert: $EXCLUDE"
|
log_info "Ignoriert (fest): $EXCLUDE"
|
||||||
|
log_info "Ignoriert (rclone.ignore): ${EXCLUDE_FROM:-keiner}"
|
||||||
log_info "Bestehende Dateien überspringen: $IGNORE"
|
log_info "Bestehende Dateien überspringen: $IGNORE"
|
||||||
log_info "Testlauf: $IST_TEST"
|
log_info "Testlauf: $IST_TEST"
|
||||||
log_info "Starte..."
|
log_info "Starte..."
|
||||||
|
|
||||||
rclone -P "$MODUS" "$QUErclone copy LLE" "$ZIEL" \
|
rclone -P "$MODUS" "$QUELLE" "$ZIEL" \
|
||||||
--backup-dir="$ARCHIV" \
|
--backup-dir="$ARCHIV" \
|
||||||
--log-file="$LOGBUCH" \
|
--log-file="$LOGBUCH" \
|
||||||
--log-level="$LOGLVL" \
|
--log-level="$LOGLVL" \
|
||||||
|
$EXCLUDE \
|
||||||
|
$EXCLUDE_FROM \
|
||||||
$IGNORE \
|
$IGNORE \
|
||||||
--ignore-from "./rclone.ignore"
|
|
||||||
$DRYRUN
|
$DRYRUN
|
||||||
|
|
||||||
log_error "ERR: $?"
|
log_error "ERR: $?"
|
||||||
|
|
||||||
|
# Temporäre ignore-Datei aufräumen (falls Remote-Quelle)
|
||||||
|
[ -n "$TMP_IGNORE" ] && rm -f "$TMP_IGNORE"
|
||||||
|
|
||||||
log_info "Archiv packen..."
|
log_info "Archiv packen..."
|
||||||
rclone archive create "$ARCHIV/" "$ARCHIV.zip" -P \
|
rclone archive create "$ARCHIV/" "$ARCHIV.zip" -P \
|
||||||
--log-level="$LOGLVL" \
|
--log-level="$LOGLVL" \
|
||||||
|
|||||||
Reference in New Issue
Block a user