Bash: Finde Ausdrücke die in keine Datei vorkommen

Wenn man z.B. bei seinem ansible playbooks am umbauen und aufräumen ist, steht nachher die Befürchtung, dass irgendwo noch Ausdrücke/Variablen vorkommen, welcher aber nicht mehr benötigt werden.

Also habe ich ChatGPT gefragt, mir eine Lösung dazu zu entwerfen und herausgekommen ist dieses schöne Shell Script. 😁

Falls deine Suchbegriffe in patterns.txt stehen (ein Begriff pro Zeile), verwende:

patterns_file="patterns.txt"
search_dir="/pfad/zum/verzeichnis"

# Speichere alle Suchbegriffe in einer Variablen
mapfile -t patterns < "$patterns_file"

# Initialisiere eine Liste für nicht gefundene Begriffe
not_found=()

# Überprüfe jeden Begriff
for pattern in "${patterns[@]}"; do
    if ! grep -r -q -F "$pattern" "$search_dir"; then
        not_found+=("$pattern")
    fi
done

# Ergebnisse anzeigen
if [ ${#not_found[@]} -eq 0 ]; then
    echo "Alle Begriffe wurden in mindestens einer Datei gefunden. ✅"
else
    echo "Diese Begriffe wurden in KEINER Datei gefunden: ❌"
    printf "%s\n" "${not_found[@]}"
fi

Erklärung

  1. Lädt die Suchbegriffe aus patterns.txt in ein Bash-Array (mapfile -t patterns).
  2. Durchläuft jedes Suchmuster und prüft mit grep -r -q -F "$pattern" "$search_dir", ob es vorkommt.
    • -r → Rekursiv durchsuchen
    • -q → Keine Ausgabe (wir prüfen nur den Rückgabewert)
    • -F → Exakte Zeichenfolgen statt regulärer Ausdrücke
  3. Falls kein Treffer, wird der Begriff zur Liste not_found[] hinzugefügt.
  4. Gibt am Ende alle Begriffe aus, die in keiner Datei vorkamen.

Published by

Steven Varco

Steven ist ein Redhat RHCE- und Kubernetes CKA Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert