#!/bin/bash # ============================================================================== # TOOLBOX MODUL: CONFIG-SYNC PRO (Dynamic Folder Edition) # ============================================================================== # 1. SYSTEM-PFADE SICHERSTELLEN export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 2. DYNAMISCHE PFADERMITTLUNG FÜR DAS SKRIPT # Findet den Ort, an dem dieses Skript gespeichert ist SCRIPT_DIR=$(dirname "$(readlink -f "$0")") # Ordner relativ zum Skript-Standort definieren CONFIG_DIR="$SCRIPT_DIR/configs/profiles" BACKUP_BASE="$SCRIPT_DIR/configs/data" # Ordner sofort erstellen /usr/bin/mkdir -p "$CONFIG_DIR" /usr/bin/mkdir -p "$BACKUP_BASE" # 3. UMGEBUNGSPRÜFUNG ZENITY_BIN=$(/usr/bin/which zenity) [ -z "$ZENITY_BIN" ] && ZENITY_BIN="/usr/bin/zenity" # Prüfen auf grafische Oberfläche (wichtig für SSH) if [ -z "$DISPLAY" ]; then echo "FEHLER: Keine grafische Oberfläche (DISPLAY) erkannt." echo "Nutze 'ssh -X christian@debian-keller' für den Fernzugriff." exit 1 fi # 4. PROFIL-MANAGEMENT PROFILES="" if /usr/bin/ls "$CONFIG_DIR"/*.conf >/dev/null 2>&1; then PROFILES=$(/usr/bin/ls "$CONFIG_DIR"/*.conf | /usr/bin/xargs -n 1 basename | /usr/bin/sed 's/\.conf//') fi # Auswahlfenster für Profil if [ -z "$PROFILES" ]; then PROFILE_ACTION=$($ZENITY_BIN --list --title="Profil-Management" --column="Aktion" \ "Neues Profil erstellen" --width=300 --height=200) else PROFILE_ACTION=$($ZENITY_BIN --list --title="Profil wählen" --column="Profil / Aktion" \ $PROFILES "Neues Profil erstellen" --width=300 --height=300) fi [ -z "$PROFILE_ACTION" ] && exit 0 # 5. PROFIL-DATEI FESTLEGEN if [ "$PROFILE_ACTION" == "Neues Profil erstellen" ]; then PROFILE_NAME=$($ZENITY_BIN --entry --title="Neues Profil" --text="Name (z.B. Keller_PC):") [ -z "$PROFILE_NAME" ] && exit 0 PROFILE_FILE="$CONFIG_DIR/${PROFILE_NAME}.conf" # Standard-Einträge für ein neues Profil echo "CrealitySlicer|$HOME/.config/CrealitySlicer/" > "$PROFILE_FILE" echo "FreeCAD|$HOME/.config/FreeCAD/" >> "$PROFILE_FILE" $ZENITY_BIN --info --text="Profil $PROFILE_NAME erstellt." --width=250 else PROFILE_FILE="$CONFIG_DIR/${PROFILE_ACTION}.conf" fi # 6. AKTION WÄHLEN ACTION=$($ZENITY_BIN --list --title="Aktion wählen" \ --column="Aktion" "Backup (System -> Toolbox)" "Restore (Toolbox -> System)" --width=300) [ -z "$ACTION" ] && exit 0 # 7. PROGRAMM-AUSWAHL PROGRAM_LIST=$(/usr/bin/cat "$PROFILE_FILE") OPTIONS=() while IFS='|' read -r NAME PATH; do [ -z "$NAME" ] && continue OPTIONS+=(FALSE "$NAME") done <<< "$PROGRAM_LIST" SELECTED=$($ZENITY_BIN --list --title="Programme wählen" --checklist \ --column="Wahl" --column="Programm" "${OPTIONS[@]}" --width=350 --height=400) [ -z "$SELECTED" ] && exit 0 # 8. DURCHFÜHRUNG IFS='|' read -ra ADDR <<< "$SELECTED" for NAME in "${ADDR[@]}"; do # Pfad aus Profil laden CURRENT_PATH=$(/usr/bin/grep "^$NAME|" "$PROFILE_FILE" | /usr/bin/cut -d'|' -f2) # Pfad-Bestätigung (vorausgefüllt aus cp.conf) NEW_PATH=$($ZENITY_BIN --entry --title="$NAME" --text="Pfad prüfen/anpassen:" \ --entry-text="$CURRENT_PATH" --width=600) if [ -n "$NEW_PATH" ]; then # Profil-Datei bei Änderung aktualisieren if [ "$NEW_PATH" != "$CURRENT_PATH" ]; then /usr/bin/sed -i "s@^$NAME|.*@$NAME|$NEW_PATH@" "$PROFILE_FILE" fi # DYNAMISCHER ORDNERNAME: Wir nehmen den Namen des Ordners aus dem Systempfad # Entfernt abschließende Slashes für basename CLEAN_PATH="${NEW_PATH%/}" REAL_FOLDER_NAME=$(/usr/bin/basename "$CLEAN_PATH") DEST_PATH="$BACKUP_BASE/$REAL_FOLDER_NAME" if [ "$ACTION" == "Backup (System -> Toolbox)" ]; then if [ -e "$NEW_PATH" ]; then /usr/bin/mkdir -p "$DEST_PATH" # Sichert in den Ordner mit dem Namen aus dem System (z.B. CrealityPrint) /usr/bin/rsync -av --delete "$NEW_PATH/" "$DEST_PATH/" else $ZENITY_BIN --error --text="Quellpfad nicht gefunden:\n$NEW_PATH" fi elif [ "$ACTION" == "Restore (Toolbox -> System)" ]; then if [ -d "$DEST_PATH" ]; then # Sicherheitskopie mit Tilde (~) erstellen if [ -e "$NEW_PATH" ]; then TIMESTAMP=$(/usr/bin/date +%Y%m%d_%H%M%S) BACKUP_NAME="${CLEAN_PATH}_${TIMESTAMP}~" /usr/bin/mv "$NEW_PATH" "$BACKUP_NAME" fi /usr/bin/mkdir -p "$NEW_PATH" /usr/bin/rsync -av "$DEST_PATH/" "$NEW_PATH/" fi fi fi done $ZENITY_BIN --info --text="Vorgang erfolgreich beendet!" --width=250