Compare commits

...

10 commits
0.1.2 ... main

14 changed files with 413 additions and 123 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
*.log *.log
.env .env
sync.conf
node_modules/ node_modules/

View file

@ -12,7 +12,7 @@ Dieses Bash-Skript automatisiert das Erstellen einer konsistenten Ordnerstruktur
## 🚀 Funktionen ## 🚀 Funktionen
* Automatisierte Struktur: Erstellt vordefinierte Ordner für Hardware- und Softwareprojekte. * Automatisierte Struktur: Erstellt vordefinierte Ordner für Hardware- und Softwareprojekte.
* Verschlagwortung (Tags): Fragt beim Erstellen Schlagworte ab und schreibt diese als #Tags in die Projekt-README für eine blitzschnelle Suche. * Verschlagwortung (Tags): Fragt beim Erstellen Schlagworte ab und schreibt diese als Tags in die Projekt-README für eine blitzschnelle Suche.
* Einsatzfertig: * Einsatzfertig:
* Erstellt direkt eine main.py für Python-Projekte. * Erstellt direkt eine main.py für Python-Projekte.
* Erstellt ein ausführbares .sh-Skript für Bash-Projekte. * Erstellt ein ausführbares .sh-Skript für Bash-Projekte.
@ -35,19 +35,77 @@ Je nach Auswahl generiert das Skript folgende Pfade:
* Python: Erstellt src/main.py, tests/ und docs/. * Python: Erstellt src/main.py, tests/ und docs/.
* Bash: Erstellt ein direkt ausführbares Skript im Projektordner. * Bash: Erstellt ein direkt ausführbares Skript im Projektordner.
## 🛠️ Installation & Nutzung
1. Skript herunterladen: Speichere das Skript als setup_projekt.sh in deinem Hauptverzeichnis.
2. Rechte vergeben:
chmod +x setup_projekt.sh
3. Starten:
./setup_projekt.sh
## 🔍 Indizierung & Suche
Die erzeugte README.md enthält eine Sektion ## Tags zur Indizierung.
Dadurch kannst du Tools wie VS Code, Everything oder die Windows-Suche nutzen, um projektübergreifend nach Schlagworten zu suchen (z.B. Suche nach #Gehäuse oder #Halterung).
------------------------------ ------------------------------
## 📋 Funktionen
1. **Projekt erstellen**: Automatisiertes Anlegen von Ordnerstrukturen inkl. indizierter README.
2. **Projekt suchen**: Rekursive Suche über Tags innerhalb aller Projekt-READMEs.
3. **Vorschau**: Direktes Öffnen der Projekt-Dokumentation im Browser/Standard-Viewer.
---
## 🚀 Anleitung
### 1. Start der Toolbox
Starte die Toolbox über das Desktop-Icon oder direkt im Terminal via `./toolbox.sh`. Es erscheint das Hauptmenü:
![Hauptmenü der Toolbox](main.png)
### 2. Ein neues Projekt anlegen
Wähle **"1. Projekt erstellen"**. Ein grafischer Dialog führt dich durch die Einrichtung:
* **Name**: Der Projektname (Leerzeichen werden automatisch in Unterstriche umgewandelt).
* **Typ**: Auswahl zwischen Hardware (CAD/CAM Struktur) oder Software (Python/Bash).
* **Tags**: Schlagworte für die spätere Suche.
![Projekt-Setup Dialog](name_angabe.png)
![Projekt-Setup Dialog](kategorien_auswahl.png)
![Projekt-Setup Dialog](tags_angabe.png)
### 3. Projekte finden und anzeigen
Wähle **"2. Projekt suchen"**.
1. Wähle einen der gefundenen **Tags** aus der Liste.
2. Wähle das gewünschte **Projekt** aus den Ergebnissen.
3. Die `README.md` wird automatisch in deinem Standard-Viewer geöffnet, um Bilder und Dokumentation anzuzeigen.
![Projekt-Setup Dialog](tag_auswahl.png)
![Projekt-Setup Dialog](projekt_auswahl.png)
---
## 🏗️ Ordnerstruktur
Die Toolbox organisiert deine Daten wie folgt:
* **01_Hardware_Projekte/**: Für 3D-Druck, CNC und CAD.[cite: 2]
* **02_Software_Scripts/**: Unterteilt in Python und Bash.[cite: 2]
* **README.md**: Jedes Projekt erhält eine Vorlage mit Zeitstempel und Tags.[cite: 2]
---
## 🔧 Installation & Pfade
Die Toolbox nutzt **relative Pfade**. Du kannst den gesamten Ordner `Projekte` verschieben, solange die Skripte zusammenbleiben.
**Abhängigkeiten:**
- `zenity` (für die GUI)
- `xfce4-terminal` (optional)
- `xdg-utils` (für das Öffnen der READMEs)
```bash
# Skripte ausführbar machen
chmod +x toolbox.sh find.sh setup_Projekt.sh
---
# 🛠 Christian's Projekt-Toolbox v0.1.6
Änderungen !!!!
Eine automatisierte Umgebung zur Verwaltung von Hardware- und Softwareprojekten unter Debian/Linux.
## 🚀 Funktionen
- **Projekt-Setup**: Erstellt automatisch Ordner wie `CAD`, `CAM`, `Python` oder `Bash`.
- **Intelligente Suche**: Findet Projekte anhand von Tags in ihren README-Dateien und zeigt die Häufigkeit an.
- **Cloud-Sync**: Synchronisiert den gesamten Arbeitsstand via rsync mit einem entfernten Server.
## 📋 Installation
Stelle sicher, dass die benötigten Pakete installiert sind:
```bash
sudo apt update && sudo apt install zenity rsync sshpass

158
find.sh
View file

@ -1,69 +1,117 @@
#!/bin/bash #!/bin/bash
# Ermittelt das Verzeichnis, in dem dieses Skript liegt, als Basis für die Suche # ==============================================================================
BASE_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd) # TOOLBOX MODUL: CONFIG-SYNC PRO (Relativ-Edition)
# ==============================================================================
while true; do # 1. DYNAMISCHE PFADERMITTLUNG
# 1. Alle README.md Dateien finden und nach Tags durchsuchen # Ermittelt den Ordner, in dem dieses Skript liegt
# Suche startet im dynamisch ermittelten BASE_DIR SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
all_tags=$(grep -rhioE "(#\w+|Tags:.*)" "$BASE_DIR" --include="README.md" 2>/dev/null | \
sed 's/Tags://g' | tr ',' '\n' | tr -d ' ' | sort -u)
if [ -z "$all_tags" ]; then # Ordner relativ zum Skript-Standort definieren
zenity --error --title="Fehler" --text="Keine Tags in den README-Dateien unter\n$BASE_DIR gefunden." CONFIG_DIR="$SCRIPT_DIR/configs/profiles"
break BACKUP_BASE="$SCRIPT_DIR/configs/data"
fi
# 2. Grafische Auswahl der Tags via Zenity # Ordner sofort erstellen
selected_tag=$(zenity --list \ mkdir -p "$CONFIG_DIR"
--title="Projekt-Tag-Suche" \ mkdir -p "$BACKUP_BASE"
--column="Verfügbare Tags" \
--width=400 --height=500 \
$all_tags)
# Wenn Abbrechen gedrückt wurde oder das Fenster geschlossen wurde # 2. UMGEBUNGSPRÜFUNG
if [ -z "$selected_tag" ]; then ZENITY_BIN=$(which zenity)
break [ -z "$ZENITY_BIN" ] && ZENITY_BIN="/usr/bin/zenity"
fi
# 3. Ergebnisse finden # Prüfen auf grafische Oberfläche (wichtig für SSH)
results=$(grep -rl "$selected_tag" "$BASE_DIR" --include="README.md" 2>/dev/null | while read -r file; do if [ -z "$DISPLAY" ]; then
dirname "$(realpath "$file")" echo "FEHLER: Keine grafische Oberfläche (DISPLAY) erkannt."
done) echo "Nutze 'ssh -X christian@debian-keller' für den Fernzugriff."
exit 1
fi
# Ergebnisse in einem Info-Fenster anzeigen # 3. PROFIL-MANAGEMENT
if [ -z "$results" ]; then PROFILES=""
zenity --info --title="Ergebnis" --text="Keine Projekte für den Tag '$selected_tag' gefunden." if ls "$CONFIG_DIR"/*.conf >/dev/null 2>&1; then
else PROFILES=$(ls "$CONFIG_DIR"/*.conf | xargs -n 1 basename | sed 's/\.conf//')
zenity --info --title="Gefundene Projekte: $selected_tag" \ fi
--text="Folgende Ordner enthalten den Tag:\n\n$results" \
--width=600
fi
# 4. Export-Abfrage mit Zeitstempel-Logik # Auswahlfenster für Profil
if zenity --question --title="Exportieren?" --text="Möchtest du diese Liste in eine Datei speichern?"; then if [ -z "$PROFILES" ]; then
# Zeitstempel für den Dateinamen (amerikanisches Format für die Sortierung) PROFILE_ACTION=$($ZENITY_BIN --list --title="Profil-Management" --column="Aktion" \
timestamp=$(date +"%Y-%m-%d_%H-%M-%S") "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
# Dateiauswahl-Dialog zum Speichern [ -z "$PROFILE_ACTION" ] && exit 0
final_filename=$(zenity --file-selection --save --confirm-overwrite \
--filename="${timestamp}_suche_export.txt" \
--title="Export speichern unter...")
if [ -n "$final_filename" ]; then # 4. PROFIL-DATEI FESTLEGEN
{ if [ "$PROFILE_ACTION" == "Neues Profil erstellen" ]; then
echo "Tag: $selected_tag" PROFILE_NAME=$($ZENITY_BIN --entry --title="Neues Profil" --text="Name (z.B. Keller_PC):")
echo "Export-Zeitpunkt: $(date)" [ -z "$PROFILE_NAME" ] && exit 0
echo "------------------------------------------" PROFILE_FILE="$CONFIG_DIR/${PROFILE_NAME}.conf"
echo "Ergebnisse:"
echo "$results" # Standard-Einträge für ein neues Profil
} > "$final_filename" echo "CrealitySlicer|$HOME/.config/CrealitySlicer/" > "$PROFILE_FILE"
zenity --info --text="Datei wurde erfolgreich gespeichert:\n$final_filename" 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
fi fi
# 5. Weitersuchen oder Beenden
if ! zenity --question --title="Weitere Suche?" --text="Möchtest du eine weitere Suche starten?"; then
break
fi
done done
$ZENITY_BIN --info --text="Vorgang erfolgreich beendet!" --width=250

BIN
kategorien_auswahl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
main.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
name_angabe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

BIN
projekt_auswahl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View file

@ -3,9 +3,9 @@ Version=1.0
Type=Application Type=Application
Name=setup_Projekt Name=setup_Projekt
Comment=Startet mein Bash-Skript im Terminal Comment=Startet mein Bash-Skript im Terminal
Exec=bash -c "./setup_Projekt.sh; echo; echo 'Fertig - Drücke Enter zum Schließen'; read" Exec=bash "./toolbox.sh"
Icon=utilities-terminal Icon=utilities-terminal
Terminal=true Terminal=false
Path=/home/christian/Projekte Path=/home/christian/Projekte
Categories=Application; Categories=Application;
StartupNotify=true StartupNotify=true

View file

@ -1,64 +1,60 @@
#!/bin/bash #!/bin/bash
# --- Konfiguration --- # Das Skript arbeitet im aktuellen Ordner
# Das Skript arbeitet in dem Ordner, in dem es gestartet wird. ROOT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
ROOT_DIR=$(pwd)
echo "--- Projekt-Konfigurator ---" # 1. Name des Projekts abfragen
read -p "Name des Projekts: " NAME NAME=$(zenity --entry --title="Projekt-Konfigurator" --text="Name des Projekts:")
[ -z "$NAME" ] && exit 0
NAME_CLEAN=${NAME// /_} NAME_CLEAN=${NAME// /_}
echo -e "\nWelche Art von Projekt?" # 2. Art des Projekts wählen
echo "1) Hardware (3D-Druck/CNC)" TYPE=$(zenity --list --radiolist --title="Projekt-Typ" --column="" --column="Typ" \
echo "2) Software (Python/Bash)" TRUE "Hardware (3D-Druck/CNC)" \
read -p "Auswahl (1 oder 2): " TYPE FALSE "Software (Python/Bash)")
[ -z "$TYPE" ] && exit 0
# Tags abfragen (wichtig für die spätere Indizierung) # 3. Tags abfragen
echo -e "\nGib Schlagworte (Tags) für die Suche ein (z.B. Gehäuse Motor Werkzeug):" USER_TAGS=$(zenity --entry --title="Tags" --text="Gib Schlagworte ein (z.B. Motor Gehäuse):")
read -p "Tags: " USER_TAGS
# Pfad-Logik und Ordner-Erstellung # Pfad-Logik
if [ "$TYPE" == "1" ]; then if [[ "$TYPE" == "Hardware"* ]]; then
BASE_DIR="01_Hardware_Projekte/$NAME_CLEAN" BASE_DIR="01_Hardware_Projekte/$NAME_CLEAN"
mkdir -p "$BASE_DIR"/{CAD,CAM,3D_Print,Dokumentation,Ressourcen} mkdir -p "$ROOT_DIR/$BASE_DIR"/{CAD,CAM,3D_Print,Dokumentation,Ressourcen}
CATEGORY="Hardware (3D-Druck/CNC)" CATEGORY="Hardware (3D-Druck/CNC)"
elif [ "$TYPE" == "2" ]; then else
read -p "Sprache (Python/Bash): " LANG LANG=$(zenity --list --radiolist --title="Sprache" --column="" --column="Sprache" \
if [[ "$LANG" =~ ^[Pp]ython$ ]]; then TRUE "Python" \
FALSE "Bash")
[ -z "$LANG" ] && exit 0
if [ "$LANG" == "Python" ]; then
BASE_DIR="02_Software_Scripts/Python/$NAME_CLEAN" BASE_DIR="02_Software_Scripts/Python/$NAME_CLEAN"
mkdir -p "$BASE_DIR"/{src,tests,docs} mkdir -p "$ROOT_DIR/$BASE_DIR"/{src,tests,docs}
touch "$BASE_DIR/src/main.py" touch "$ROOT_DIR/$BASE_DIR/src/main.py"
CATEGORY="Software (Python)" CATEGORY="Software (Python)"
else else
BASE_DIR="02_Software_Scripts/Bash/$NAME_CLEAN" BASE_DIR="02_Software_Scripts/Bash/$NAME_CLEAN"
mkdir -p "$BASE_DIR" mkdir -p "$ROOT_DIR/$BASE_DIR"
touch "$BASE_DIR/$NAME_CLEAN.sh" touch "$ROOT_DIR/$BASE_DIR/$NAME_CLEAN.sh"
chmod +x "$BASE_DIR/$NAME_CLEAN.sh" chmod +x "$ROOT_DIR/$BASE_DIR/$NAME_CLEAN.sh"
CATEGORY="Software (Bash)" CATEGORY="Software (Bash)"
fi fi
else
echo "Ungültige Auswahl. Abbruch."
exit 1
fi fi
# Voller Pfad zum Zielordner # README.md erstellen
FINAL_PATH="$ROOT_DIR/$BASE_DIR" FINAL_PATH="$ROOT_DIR/$BASE_DIR"
# README.md erstellen und befüllen
{ {
echo "# $NAME" echo "# $NAME"
echo "Kategorie: $CATEGORY" echo "Kategorie: $CATEGORY"
echo "Erstellt am: $(date +'%d.%m.%Y')" echo "Erstellt am: $(date +'%d.%m.%Y')"
echo -e "\n## Tags zur Indizierung" echo -e "\n## Tags zur Indizierung"
for tag in $USER_TAGS; do for tag in $USER_TAGS; do
CLEAN_TAG=${tag/#/} # Entfernt evtl. vorhandene # um Dopplungen zu vermeiden CLEAN_TAG=${tag/#/}
echo -n "#$CLEAN_TAG " echo -n "#$CLEAN_TAG "
done done
echo -e "\n\n## Notizen" echo -e "\n\n## Notizen"
echo "- Hier Projektdetails eintragen..." echo "- Hier Projektdetails eintragen..."
} > "$FINAL_PATH/README.md" } > "$FINAL_PATH/README.md"
echo -e "\n--------------------------------------------------" zenity --info --title="Erfolg" --text="Projekt '$NAME_CLEAN' wurde erstellt!\n\nPfad: $BASE_DIR"
echo "Projekt '$NAME_CLEAN' wurde erfolgreich erstellt!"
echo "Pfad: $BASE_DIR"
echo "Die README.md wurde mit deinen Tags indiziert."

126
sync_configs.sh Executable file
View file

@ -0,0 +1,126 @@
#!/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

40
sync_rsync.sh Executable file
View file

@ -0,0 +1,40 @@
#!/bin/bash
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
CONF_FILE="$SCRIPT_DIR/sync.conf"
if [ ! -f "$CONF_FILE" ]; then
zenity --error --text="sync.conf nicht gefunden!"
exit 1
fi
source "$CONF_FILE"
# 1. Passwort abfragen
SSH_PASS=$(zenity --password --title="SSH Authentifizierung" --text="Passwort für $SSH_USER@$SSH_HOST:")
# Abbrechen wenn kein Passwort eingegeben wurde
[ -z "$SSH_PASS" ] && exit 0
LOCAL_DIR="$SCRIPT_DIR/"
# 2. Synchronisation (Download & Upload)
# Wir fügen '-o StrictHostKeyChecking=no' hinzu, damit SSH nicht bei unbekannten Hosts blockiert.
zenity --info --text="Synchronisation wird gestartet..." --timeout=2
# Download
sshpass -p "$SSH_PASS" rsync -auvz -e "ssh -p $SSH_PORT -o StrictHostKeyChecking=no" "$SSH_USER@$SSH_HOST:$REMOTE_DIR" "$LOCAL_DIR" 2>/tmp/rsync_error
# Upload
sshpass -p "$SSH_PASS" rsync -auvz -e "ssh -p $SSH_PORT -o StrictHostKeyChecking=no" "$LOCAL_DIR" "$SSH_USER@$SSH_HOST:$REMOTE_DIR" 2>>/tmp/rsync_error
# 3. Erfolgskontrolle
if [ $? -eq 0 ]; then
zenity --info --title="Erfolg" --text="Synchronisation erfolgreich abgeschlossen!"
else
ERROR_MSG=$(cat /tmp/rsync_error)
zenity --error --title="Fehler" --text="Synchronisation fehlgeschlagen!\n\nDetails:\n$ERROR_MSG"
fi
# Temporäre Fehlerdatei löschen
rm -f /tmp/rsync_error

BIN
tag_auswahl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
tags_angabe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View file

@ -1,33 +1,54 @@
#!/bin/bash #!/bin/bash
# Ermittelt das Verzeichnis, in dem dieses Skript liegt # Pfad zum Skript-Ordner ermitteln
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd) SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
# Relative Pfade zu den Modulen definieren
# WICHTIG: Prüfe, ob die Datei wirklich ".setup_Projekt.sh" heißt (mit Punkt!)
SCRIPT_SETUP="$SCRIPT_DIR/.setup_Projekt.sh"
SCRIPT_FIND="$SCRIPT_DIR/find.sh"
while true; do while true; do
# Hauptmenü mit Zenity - Korrigierte Version
CHOICE=$(zenity --list \ CHOICE=$(zenity --list \
--title="Christian's Projekt-Toolbox" \ --title="Christian's Projekt-Toolbox" \
--text="Wählen Sie eine Aktion aus:" \
--column="Aktion" --column="Beschreibung" \ --column="Aktion" --column="Beschreibung" \
--width=500 --height=350 \ --width=600 --height=450 \
"1. Projekt erstellen" "Legt neue Hardware- oder Software-Ordner an" \ "1. Projekt erstellen" "Neuen Ordner mit Struktur anlegen" \
"2. Projekt suchen" "Durchsucht Readmes nach Tags" \ "2. Projekt suchen" "Tags in READMEs durchsuchen" \
"3. Beenden" "Schließt die Toolbox") "3. Cloud Sync (rsync)" "Abgleich mit Server (Zwei-Wege-Sync)" \
"4. Beenden" "Schließt die Toolbox")
# Falls Abbrechen gedrückt wurde oder das Fenster geschlossen wurde
if [ $? -ne 0 ]; then
echo "Toolbox wird beendet."
break
fi
# Auswahl auswerten
case "$CHOICE" in case "$CHOICE" in
"1. Projekt erstellen") "1. Projekt erstellen")
# Wir übergeben den vollen Pfad ($SCRIPT_SETUP) direkt an bash bash "$SCRIPT_DIR/setup_Projekt.sh"
xfce4-terminal --working-directory="$SCRIPT_DIR" -e "bash -c '$SCRIPT_SETUP; echo; echo \"Fertig. Taste drücken...\"; read'"
;; ;;
"2. Projekt suchen") "2. Projekt suchen")
# Suche direkt ausführen bash "$SCRIPT_DIR/find.sh"
bash "$SCRIPT_FIND"
;; ;;
"3. Beenden" | "")
exit 0 "3. Cloud Sync (rsync)")
if [ -f "$SCRIPT_DIR/sync_rsync.sh" ]; then
bash "$SCRIPT_DIR/sync_rsync.sh"
else
zenity --error --text="Skript 'sync_rsync.sh' nicht gefunden!"
fi
;;
"4. Beenden")
echo "Toolbox wird beendet."
break
;;
*)
# Sicherheitshalber, falls CHOICE leer ist
if [ -n "$CHOICE" ]; then
zenity --info --text="Aktion abgebrochen." --timeout=1
fi
;; ;;
esac esac
done done