setup_Projekt/find.sh

117 lines
No EOL
4.1 KiB
Bash
Executable file

#!/bin/bash
# ==============================================================================
# TOOLBOX MODUL: CONFIG-SYNC PRO (Relativ-Edition)
# ==============================================================================
# 1. DYNAMISCHE PFADERMITTLUNG
# Ermittelt den Ordner, in dem dieses Skript liegt
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
mkdir -p "$CONFIG_DIR"
mkdir -p "$BACKUP_BASE"
# 2. UMGEBUNGSPRÜFUNG
ZENITY_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
# 3. PROFIL-MANAGEMENT
PROFILES=""
if ls "$CONFIG_DIR"/*.conf >/dev/null 2>&1; then
PROFILES=$(ls "$CONFIG_DIR"/*.conf | xargs -n 1 basename | 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
# 4. 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
# 5. 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
# 6. PROGRAMM-AUSWAHL
PROGRAM_LIST=$(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
# 7. DURCHFÜHRUNG
IFS='|' read -ra ADDR <<< "$SELECTED"
for NAME in "${ADDR[@]}"; do
CURRENT_PATH=$(grep "^$NAME|" "$PROFILE_FILE" | cut -d'|' -f2)
NEW_PATH=$($ZENITY_BIN --entry --title="$NAME" --text="Pfad prüfen/anpassen:" \
--entry-text="$CURRENT_PATH" --width=500)
if [ -n "$NEW_PATH" ]; then
# Profil-Datei bei Änderung aktualisieren
if [ "$NEW_PATH" != "$CURRENT_PATH" ]; then
# Nutzt @ als Trenner in sed, falls Pfade Slashes enthalten
sed -i "s@^$NAME|.*@$NAME|$NEW_PATH@" "$PROFILE_FILE"
fi
DEST_PATH="$BACKUP_BASE/$NAME"
if [ "$ACTION" == "Backup (System -> Toolbox)" ]; then
if [ -e "$NEW_PATH" ]; then
mkdir -p "$DEST_PATH"
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=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="${NEW_PATH%/}_${TIMESTAMP}~"
mv "$NEW_PATH" "$BACKUP_NAME"
fi
mkdir -p "$NEW_PATH"
rsync -av "$DEST_PATH/" "$NEW_PATH/"
fi
fi
fi
done
$ZENITY_BIN --info --text="Vorgang erfolgreich beendet!" --width=250