Update: Tag-Zähler in Suche und GUI-Optimierungen
This commit is contained in:
parent
8c5ce19ce9
commit
8f9252429b
1 changed files with 48 additions and 48 deletions
96
find.sh
96
find.sh
|
|
@ -1,69 +1,69 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Ermittelt das Verzeichnis, in dem dieses Skript liegt, als Basis für die Suche
|
# Robustere Ermittlung des Skript-Verzeichnisses
|
||||||
BASE_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
|
SCRIPT_PATH=$(readlink -f "$0")
|
||||||
|
BASE_DIR=$(dirname "$SCRIPT_PATH")
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
# 1. Alle README.md Dateien finden und nach Tags durchsuchen
|
# 1. Tags sammeln und zählen
|
||||||
# Suche startet im dynamisch ermittelten BASE_DIR
|
# Wir extrahieren die Tags, sortieren sie und lassen 'uniq -c' die Vorkommen zählen
|
||||||
all_tags=$(grep -rhioE "(#\w+|Tags:.*)" "$BASE_DIR" --include="README.md" 2>/dev/null | \
|
tag_counts=$(grep -rhioE "(#\w+|Tags:.*)" "$BASE_DIR" --include="README.md" 2>/dev/null | \
|
||||||
sed 's/Tags://g' | tr ',' '\n' | tr -d ' ' | sort -u)
|
sed 's/Tags://g' | tr ',' '\n' | tr -d ' ' | sort | uniq -c | sort -rn)
|
||||||
|
|
||||||
if [ -z "$all_tags" ]; then
|
if [ -z "$tag_counts" ]; then
|
||||||
zenity --error --title="Fehler" --text="Keine Tags in den README-Dateien unter\n$BASE_DIR gefunden."
|
zenity --error --title="Fehler" --text="Keine Tags gefunden.\nSuche in: $BASE_DIR"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 2. Grafische Auswahl der Tags via Zenity
|
# 2. Formatierung für Zenity (Anzahl und Tag trennen)
|
||||||
selected_tag=$(zenity --list \
|
# 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" \
|
--title="Projekt-Tag-Suche" \
|
||||||
--column="Verfügbare Tags" \
|
--column="Tag (Anzahl)" \
|
||||||
--width=400 --height=500 \
|
--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_item" ]; then
|
||||||
if [ -z "$selected_tag" ]; then
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 3. Ergebnisse finden
|
# Extrahiere den reinen Tag-Namen (alles vor dem Leerzeichen/Klammer)
|
||||||
results=$(grep -rl "$selected_tag" "$BASE_DIR" --include="README.md" 2>/dev/null | while read -r file; do
|
selected_tag=$(echo "$selected_item" | awk '{print $1}')
|
||||||
dirname "$(realpath "$file")"
|
|
||||||
done)
|
|
||||||
|
|
||||||
# Ergebnisse in einem Info-Fenster anzeigen
|
# 4. Projektauswahl-Schleife für den gewählten Tag
|
||||||
if [ -z "$results" ]; then
|
while true; do
|
||||||
zenity --info --title="Ergebnis" --text="Keine Projekte für den Tag '$selected_tag' gefunden."
|
results=$(grep -rl "$selected_tag" "$BASE_DIR" --include="README.md" 2>/dev/null | while read -r file; do
|
||||||
else
|
dirname "$(realpath "$file")"
|
||||||
zenity --info --title="Gefundene Projekte: $selected_tag" \
|
done)[cite: 3]
|
||||||
--text="Folgende Ordner enthalten den Tag:\n\n$results" \
|
|
||||||
--width=600
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 4. Export-Abfrage mit Zeitstempel-Logik
|
if [ -z "$results" ]; then
|
||||||
if zenity --question --title="Exportieren?" --text="Möchtest du diese Liste in eine Datei speichern?"; then
|
zenity --info --text="Keine Projekte für '$selected_tag' gefunden."
|
||||||
# Zeitstempel für den Dateinamen (amerikanisches Format für die Sortierung)
|
break
|
||||||
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
|
||||||
fi
|
|
||||||
|
|
||||||
# 5. Weitersuchen oder Beenden
|
selected_project=$(echo "$results" | zenity --list \
|
||||||
if ! zenity --question --title="Weitere Suche?" --text="Möchtest du eine weitere Suche starten?"; then
|
--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
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
Loading…
Add table
Reference in a new issue