126 lines
No EOL
4.7 KiB
Bash
Executable file
126 lines
No EOL
4.7 KiB
Bash
Executable file
#!/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 |