#!/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) while true; do # 1. Alle README.md Dateien finden und nach Tags durchsuchen # 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) if [ -z "$all_tags" ]; then zenity --error --title="Fehler" --text="Keine Tags in den README-Dateien unter\n$BASE_DIR gefunden." break fi # 2. Grafische Auswahl der Tags via Zenity selected_tag=$(zenity --list \ --title="Projekt-Tag-Suche" \ --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 # 3. Ergebnisse finden results=$(grep -rl "$selected_tag" "$BASE_DIR" --include="README.md" 2>/dev/null | while read -r file; do dirname "$(realpath "$file")" 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 zenity --info --title="Gefundene Projekte: $selected_tag" \ --text="Folgende Ordner enthalten den Tag:\n\n$results" \ --width=600 fi # 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") # Dateiauswahl-Dialog zum Speichern final_filename=$(zenity --file-selection --save --confirm-overwrite \ --filename="${timestamp}_suche_export.txt" \ --title="Export speichern unter...") if [ -n "$final_filename" ]; then { echo "Tag: $selected_tag" echo "Export-Zeitpunkt: $(date)" echo "------------------------------------------" echo "Ergebnisse:" echo "$results" } > "$final_filename" zenity --info --text="Datei wurde erfolgreich gespeichert:\n$final_filename" fi fi # 5. Weitersuchen oder Beenden if ! zenity --question --title="Weitere Suche?" --text="Möchtest du eine weitere Suche starten?"; then break fi done