setup_Projekt/find.sh

69 lines
No EOL
2.4 KiB
Bash
Executable file

#!/bin/bash
# Robustere Ermittlung des Skript-Verzeichnisses
SCRIPT_PATH=$(readlink -f "$0")
BASE_DIR=$(dirname "$SCRIPT_PATH")
while true; do
# 1. Tags sammeln und zählen
# Wir extrahieren die Tags, sortieren sie und lassen 'uniq -c' die Vorkommen zählen
tag_counts=$(grep -rhioE "(#\w+|Tags:.*)" "$BASE_DIR" --include="README.md" 2>/dev/null | \
sed 's/Tags://g' | tr ',' '\n' | tr -d ' ' | sort | uniq -c | sort -rn)
if [ -z "$tag_counts" ]; then
zenity --error --title="Fehler" --text="Keine Tags gefunden.\nSuche in: $BASE_DIR"
break
fi
# 2. Formatierung für Zenity (Anzahl und Tag trennen)
# Wir wandeln die Ausgabe "5 #Weihnachten" in eine Liste um, die Zenity versteht
zenity_list=$(echo "$tag_counts" | awk '{print $2 " (" $1 ")"}')
# 3. Grafische Auswahl des Tags
selected_item=$(echo "$zenity_list" | zenity --list \
--title="Projekt-Tag-Suche" \
--column="Tag (Anzahl)" \
--width=400 --height=500 \
--text="Wähle einen Tag aus:")
if [ -z "$selected_item" ]; then
break
fi
# Extrahiere den reinen Tag-Namen (alles vor dem Leerzeichen/Klammer)
selected_tag=$(echo "$selected_item" | awk '{print $1}')
# 4. Projektauswahl-Schleife für den gewählten Tag
while true; do
results=$(grep -rl "$selected_tag" "$BASE_DIR" --include="README.md" 2>/dev/null | while read -r file; do
dirname "$(realpath "$file")"
done)[cite: 3]
if [ -z "$results" ]; then
zenity --info --text="Keine Projekte für '$selected_tag' gefunden."
break
fi
selected_project=$(echo "$results" | zenity --list \
--title="Ergebnisse für: $selected_tag" \
--column="Projekt-Pfad" \
--text="Gefundene Projekte:" \
--width=800 --height=400 \
--ok-label="README öffnen" \
--cancel-label="Zurück zur Tag-Suche")
if [ -z "$selected_project" ]; then
break
fi
# 5. README öffnen[cite: 3]
if [ -f "$selected_project/README.md" ]; then
xdg-open "$selected_project/README.md" &>/dev/null &
zenity --info --text="Öffne README von:\n$selected_project" --timeout=2
fi
done
if ! zenity --question --text="Möchtest du nach einem anderen Tag suchen?"; then
break
fi
done