Compare commits
No commits in common. "main" and "0.1.2" have entirely different histories.
14 changed files with 123 additions and 413 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,4 +1,3 @@
|
||||||
*.log
|
*.log
|
||||||
.env
|
.env
|
||||||
sync.conf
|
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|
|
||||||
90
README.md
90
README.md
|
|
@ -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,77 +35,19 @@ 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ü:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 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.
|
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
### 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.
|
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🏗️ 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
|
|
||||||
152
find.sh
152
find.sh
|
|
@ -1,117 +1,69 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# ==============================================================================
|
# Ermittelt das Verzeichnis, in dem dieses Skript liegt, als Basis für die Suche
|
||||||
# TOOLBOX MODUL: CONFIG-SYNC PRO (Relativ-Edition)
|
BASE_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
# 1. DYNAMISCHE PFADERMITTLUNG
|
while true; do
|
||||||
# Ermittelt den Ordner, in dem dieses Skript liegt
|
# 1. Alle README.md Dateien finden und nach Tags durchsuchen
|
||||||
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
|
# Suche startet im dynamisch ermittelten BASE_DIR
|
||||||
|
all_tags=$(grep -rhioE "(#\w+|Tags:.*)" "$BASE_DIR" --include="README.md" 2>/dev/null | \
|
||||||
|
sed 's/Tags://g' | tr ',' '\n' | tr -d ' ' | sort -u)
|
||||||
|
|
||||||
# Ordner relativ zum Skript-Standort definieren
|
if [ -z "$all_tags" ]; then
|
||||||
CONFIG_DIR="$SCRIPT_DIR/configs/profiles"
|
zenity --error --title="Fehler" --text="Keine Tags in den README-Dateien unter\n$BASE_DIR gefunden."
|
||||||
BACKUP_BASE="$SCRIPT_DIR/configs/data"
|
break
|
||||||
|
|
||||||
# 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
|
fi
|
||||||
|
|
||||||
# 3. PROFIL-MANAGEMENT
|
# 2. Grafische Auswahl der Tags via Zenity
|
||||||
PROFILES=""
|
selected_tag=$(zenity --list \
|
||||||
if ls "$CONFIG_DIR"/*.conf >/dev/null 2>&1; then
|
--title="Projekt-Tag-Suche" \
|
||||||
PROFILES=$(ls "$CONFIG_DIR"/*.conf | xargs -n 1 basename | sed 's/\.conf//')
|
--column="Verfügbare Tags" \
|
||||||
|
--width=400 --height=500 \
|
||||||
|
$all_tags)
|
||||||
|
|
||||||
|
# Wenn Abbrechen gedrückt wurde oder das Fenster geschlossen wurde
|
||||||
|
if [ -z "$selected_tag" ]; then
|
||||||
|
break
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Auswahlfenster für Profil
|
# 3. Ergebnisse finden
|
||||||
if [ -z "$PROFILES" ]; then
|
results=$(grep -rl "$selected_tag" "$BASE_DIR" --include="README.md" 2>/dev/null | while read -r file; do
|
||||||
PROFILE_ACTION=$($ZENITY_BIN --list --title="Profil-Management" --column="Aktion" \
|
dirname "$(realpath "$file")"
|
||||||
"Neues Profil erstellen" --width=300 --height=200)
|
done)
|
||||||
|
|
||||||
|
# Ergebnisse in einem Info-Fenster anzeigen
|
||||||
|
if [ -z "$results" ]; then
|
||||||
|
zenity --info --title="Ergebnis" --text="Keine Projekte für den Tag '$selected_tag' gefunden."
|
||||||
else
|
else
|
||||||
PROFILE_ACTION=$($ZENITY_BIN --list --title="Profil wählen" --column="Profil / Aktion" \
|
zenity --info --title="Gefundene Projekte: $selected_tag" \
|
||||||
$PROFILES "Neues Profil erstellen" --width=300 --height=300)
|
--text="Folgende Ordner enthalten den Tag:\n\n$results" \
|
||||||
|
--width=600
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -z "$PROFILE_ACTION" ] && exit 0
|
# 4. Export-Abfrage mit Zeitstempel-Logik
|
||||||
|
if zenity --question --title="Exportieren?" --text="Möchtest du diese Liste in eine Datei speichern?"; then
|
||||||
|
# Zeitstempel für den Dateinamen (amerikanisches Format für die Sortierung)
|
||||||
|
timestamp=$(date +"%Y-%m-%d_%H-%M-%S")
|
||||||
|
|
||||||
# 4. PROFIL-DATEI FESTLEGEN
|
# Dateiauswahl-Dialog zum Speichern
|
||||||
if [ "$PROFILE_ACTION" == "Neues Profil erstellen" ]; then
|
final_filename=$(zenity --file-selection --save --confirm-overwrite \
|
||||||
PROFILE_NAME=$($ZENITY_BIN --entry --title="Neues Profil" --text="Name (z.B. Keller_PC):")
|
--filename="${timestamp}_suche_export.txt" \
|
||||||
[ -z "$PROFILE_NAME" ] && exit 0
|
--title="Export speichern unter...")
|
||||||
PROFILE_FILE="$CONFIG_DIR/${PROFILE_NAME}.conf"
|
|
||||||
|
|
||||||
# Standard-Einträge für ein neues Profil
|
if [ -n "$final_filename" ]; then
|
||||||
echo "CrealitySlicer|$HOME/.config/CrealitySlicer/" > "$PROFILE_FILE"
|
{
|
||||||
echo "FreeCAD|$HOME/.config/FreeCAD/" >> "$PROFILE_FILE"
|
echo "Tag: $selected_tag"
|
||||||
$ZENITY_BIN --info --text="Profil $PROFILE_NAME erstellt." --width=250
|
echo "Export-Zeitpunkt: $(date)"
|
||||||
else
|
echo "------------------------------------------"
|
||||||
PROFILE_FILE="$CONFIG_DIR/${PROFILE_ACTION}.conf"
|
echo "Ergebnisse:"
|
||||||
fi
|
echo "$results"
|
||||||
|
} > "$final_filename"
|
||||||
# 5. AKTION WÄHLEN
|
zenity --info --text="Datei wurde erfolgreich gespeichert:\n$final_filename"
|
||||||
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
|
||||||
|
|
||||||
|
# 5. Weitersuchen oder Beenden
|
||||||
|
if ! zenity --question --title="Weitere Suche?" --text="Möchtest du eine weitere Suche starten?"; then
|
||||||
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
$ZENITY_BIN --info --text="Vorgang erfolgreich beendet!" --width=250
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB |
BIN
main.png
BIN
main.png
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB |
BIN
name_angabe.png
BIN
name_angabe.png
Binary file not shown.
|
Before Width: | Height: | Size: 8.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 20 KiB |
|
|
@ -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 "./toolbox.sh"
|
Exec=bash -c "./setup_Projekt.sh; echo; echo 'Fertig - Drücke Enter zum Schließen'; read"
|
||||||
Icon=utilities-terminal
|
Icon=utilities-terminal
|
||||||
Terminal=false
|
Terminal=true
|
||||||
Path=/home/christian/Projekte
|
Path=/home/christian/Projekte
|
||||||
Categories=Application;
|
Categories=Application;
|
||||||
StartupNotify=true
|
StartupNotify=true
|
||||||
|
|
|
||||||
|
|
@ -1,60 +1,64 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Das Skript arbeitet im aktuellen Ordner
|
# --- Konfiguration ---
|
||||||
ROOT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
|
# Das Skript arbeitet in dem Ordner, in dem es gestartet wird.
|
||||||
|
ROOT_DIR=$(pwd)
|
||||||
|
|
||||||
# 1. Name des Projekts abfragen
|
echo "--- Projekt-Konfigurator ---"
|
||||||
NAME=$(zenity --entry --title="Projekt-Konfigurator" --text="Name des Projekts:")
|
read -p "Name des Projekts: " NAME
|
||||||
[ -z "$NAME" ] && exit 0
|
|
||||||
NAME_CLEAN=${NAME// /_}
|
NAME_CLEAN=${NAME// /_}
|
||||||
|
|
||||||
# 2. Art des Projekts wählen
|
echo -e "\nWelche Art von Projekt?"
|
||||||
TYPE=$(zenity --list --radiolist --title="Projekt-Typ" --column="" --column="Typ" \
|
echo "1) Hardware (3D-Druck/CNC)"
|
||||||
TRUE "Hardware (3D-Druck/CNC)" \
|
echo "2) Software (Python/Bash)"
|
||||||
FALSE "Software (Python/Bash)")
|
read -p "Auswahl (1 oder 2): " TYPE
|
||||||
[ -z "$TYPE" ] && exit 0
|
|
||||||
|
|
||||||
# 3. Tags abfragen
|
# Tags abfragen (wichtig für die spätere Indizierung)
|
||||||
USER_TAGS=$(zenity --entry --title="Tags" --text="Gib Schlagworte ein (z.B. Motor Gehäuse):")
|
echo -e "\nGib Schlagworte (Tags) für die Suche ein (z.B. Gehäuse Motor Werkzeug):"
|
||||||
|
read -p "Tags: " USER_TAGS
|
||||||
|
|
||||||
# Pfad-Logik
|
# Pfad-Logik und Ordner-Erstellung
|
||||||
if [[ "$TYPE" == "Hardware"* ]]; then
|
if [ "$TYPE" == "1" ]; then
|
||||||
BASE_DIR="01_Hardware_Projekte/$NAME_CLEAN"
|
BASE_DIR="01_Hardware_Projekte/$NAME_CLEAN"
|
||||||
mkdir -p "$ROOT_DIR/$BASE_DIR"/{CAD,CAM,3D_Print,Dokumentation,Ressourcen}
|
mkdir -p "$BASE_DIR"/{CAD,CAM,3D_Print,Dokumentation,Ressourcen}
|
||||||
CATEGORY="Hardware (3D-Druck/CNC)"
|
CATEGORY="Hardware (3D-Druck/CNC)"
|
||||||
else
|
elif [ "$TYPE" == "2" ]; then
|
||||||
LANG=$(zenity --list --radiolist --title="Sprache" --column="" --column="Sprache" \
|
read -p "Sprache (Python/Bash): " LANG
|
||||||
TRUE "Python" \
|
if [[ "$LANG" =~ ^[Pp]ython$ ]]; then
|
||||||
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 "$ROOT_DIR/$BASE_DIR"/{src,tests,docs}
|
mkdir -p "$BASE_DIR"/{src,tests,docs}
|
||||||
touch "$ROOT_DIR/$BASE_DIR/src/main.py"
|
touch "$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 "$ROOT_DIR/$BASE_DIR"
|
mkdir -p "$BASE_DIR"
|
||||||
touch "$ROOT_DIR/$BASE_DIR/$NAME_CLEAN.sh"
|
touch "$BASE_DIR/$NAME_CLEAN.sh"
|
||||||
chmod +x "$ROOT_DIR/$BASE_DIR/$NAME_CLEAN.sh"
|
chmod +x "$BASE_DIR/$NAME_CLEAN.sh"
|
||||||
CATEGORY="Software (Bash)"
|
CATEGORY="Software (Bash)"
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo "Ungültige Auswahl. Abbruch."
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# README.md erstellen
|
# Voller Pfad zum Zielordner
|
||||||
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/#/}
|
CLEAN_TAG=${tag/#/} # Entfernt evtl. vorhandene # um Dopplungen zu vermeiden
|
||||||
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"
|
||||||
|
|
||||||
zenity --info --title="Erfolg" --text="Projekt '$NAME_CLEAN' wurde erstellt!\n\nPfad: $BASE_DIR"
|
echo -e "\n--------------------------------------------------"
|
||||||
|
echo "Projekt '$NAME_CLEAN' wurde erfolgreich erstellt!"
|
||||||
|
echo "Pfad: $BASE_DIR"
|
||||||
|
echo "Die README.md wurde mit deinen Tags indiziert."
|
||||||
|
|
|
||||||
126
sync_configs.sh
126
sync_configs.sh
|
|
@ -1,126 +0,0 @@
|
||||||
#!/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
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
||||||
#!/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
BIN
tag_auswahl.png
Binary file not shown.
|
Before Width: | Height: | Size: 27 KiB |
BIN
tags_angabe.png
BIN
tags_angabe.png
Binary file not shown.
|
Before Width: | Height: | Size: 8.9 KiB |
53
toolbox.sh
53
toolbox.sh
|
|
@ -1,54 +1,33 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Pfad zum Skript-Ordner ermitteln
|
# Ermittelt das Verzeichnis, in dem dieses Skript liegt
|
||||||
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=600 --height=450 \
|
--width=500 --height=350 \
|
||||||
"1. Projekt erstellen" "Neuen Ordner mit Struktur anlegen" \
|
"1. Projekt erstellen" "Legt neue Hardware- oder Software-Ordner an" \
|
||||||
"2. Projekt suchen" "Tags in READMEs durchsuchen" \
|
"2. Projekt suchen" "Durchsucht Readmes nach Tags" \
|
||||||
"3. Cloud Sync (rsync)" "Abgleich mit Server (Zwei-Wege-Sync)" \
|
"3. Beenden" "Schließt die Toolbox")
|
||||||
"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")
|
||||||
bash "$SCRIPT_DIR/setup_Projekt.sh"
|
# Wir übergeben den vollen Pfad ($SCRIPT_SETUP) direkt an bash
|
||||||
|
xfce4-terminal --working-directory="$SCRIPT_DIR" -e "bash -c '$SCRIPT_SETUP; echo; echo \"Fertig. Taste drücken...\"; read'"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"2. Projekt suchen")
|
"2. Projekt suchen")
|
||||||
bash "$SCRIPT_DIR/find.sh"
|
# Suche direkt ausführen
|
||||||
|
bash "$SCRIPT_FIND"
|
||||||
;;
|
;;
|
||||||
|
"3. Beenden" | "")
|
||||||
"3. Cloud Sync (rsync)")
|
exit 0
|
||||||
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
|
||||||
Loading…
Add table
Reference in a new issue