diff --git a/find.sh b/find.sh index 7f08577..37ea2cc 100755 --- a/find.sh +++ b/find.sh @@ -1,69 +1,69 @@ #!/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) +# Robustere Ermittlung des Skript-Verzeichnisses +SCRIPT_PATH=$(readlink -f "$0") +BASE_DIR=$(dirname "$SCRIPT_PATH") 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) + # 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 "$all_tags" ]; then - zenity --error --title="Fehler" --text="Keine Tags in den README-Dateien unter\n$BASE_DIR gefunden." + if [ -z "$tag_counts" ]; then + zenity --error --title="Fehler" --text="Keine Tags gefunden.\nSuche in: $BASE_DIR" break fi - # 2. Grafische Auswahl der Tags via Zenity - selected_tag=$(zenity --list \ + # 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="Verfügbare Tags" \ + --column="Tag (Anzahl)" \ --width=400 --height=500 \ - $all_tags) + --text="Wähle einen Tag aus:") - # Wenn Abbrechen gedrückt wurde oder das Fenster geschlossen wurde - if [ -z "$selected_tag" ]; then + if [ -z "$selected_item" ]; 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) + # Extrahiere den reinen Tag-Namen (alles vor dem Leerzeichen/Klammer) + selected_tag=$(echo "$selected_item" | awk '{print $1}') - # 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. 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] - # 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" + if [ -z "$results" ]; then + zenity --info --text="Keine Projekte für '$selected_tag' gefunden." + break fi - fi - # 5. Weitersuchen oder Beenden - if ! zenity --question --title="Weitere Suche?" --text="Möchtest du eine weitere Suche starten?"; then + 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 \ No newline at end of file