# ----------------------------------------------------------- # Betriebsanleitung und Ablaufplan für verz_checker.sh # ----------------------------------------------------------- # # Dieses Skript dient zur automatisierten Prüfung und Bearbeitung # von Verzeichnissen. Es kann in einem angegebenen Zielverzeichnis # spezifische Dateien und Ordner suchen, analysieren und verwalten. # # Funktionen: # 1) Prüfung von '3D'-Ordnern und das Löschen aller Inhalte (inklusive .rar-Dateien). # 2) Prüfung von 'Documentation'-Ordnern, bei denen nur `.rar`-Dateien erhalten bleiben. # 3) Auflistung und ggf. Löschen von Ordnern mit "Kopie" im Namen. # 4) Auflistung und ggf. Löschen von Ordnern mit "Nachscan" im Namen. # 5) Prüfung und ggf. Löschen von `.rar`-Dateien in den ersten zwei Verzeichnisebenen. # 6) Aktualisierung und Verwendung von Caches für schnelles Arbeiten. # 7) Beenden des Skripts. # # --------------------------------------------- # Wichtige Hinweise: # --------------------------------------------- # 1) Skriptaufruf: # Sie können das Skript mit einem Zielverzeichnis aufrufen: # ./verz_checker.sh /pfad/zum/zielverzeichnis # Wird kein Zielverzeichnis angegeben, wird ein Standardpfad verwendet. # # 2) Funktion des Caches: # Das Skript speichert einmalig generierte Verzeichnislisten in einer # Cache-Datei, um wiederholte Durchläufe zu beschleunigen. Der Cache kann # bei Bedarf erneuert werden. # # 3) Benutzerinteraktion: # Das Skript stellt Fragen zu den gefundenen Dateien und Ordnern, die # vor der Löschung beantwortet werden müssen. Dabei werden nur 'y' oder 'n' # als gültige Eingaben akzeptiert. # # 4) Sicherheit: # Das Skript prüft vor jedem Löschvorgang, ob die angegebenen Dateien oder # Ordner tatsächlich existieren. Nicht vorhandene Elemente werden übersprungen. # # 5) Protokollierung: # Alle Löschvorgänge und andere Aktionen werden direkt im Terminal protokolliert. # # --------------------------------------------- # Ablaufplan: # --------------------------------------------- # 1. Start: # - Das Skript prüft das angegebene Zielverzeichnis. # - Falls das Verzeichnis nicht existiert, wird das Skript mit einer Fehlermeldung beendet. # # 2. Cache-Management: # - Das Skript prüft, ob eine Cache-Datei für das Zielverzeichnis existiert. # - Wenn ja, wird der Benutzer gefragt, ob der Cache verwendet werden soll. # - Andernfalls wird eine neue Verzeichnisliste generiert und im Cache gespeichert. # # 3. Hauptmenü: # - Der Benutzer wird durch ein interaktives Menü geleitet, das folgende Optionen bietet: # 1) RAR-Dateien und Verzeichnisse in '3D'-Ordnern prüfen und ggf. löschen. # 2) Dateien und Verzeichnisse in 'Documentation'-Ordnern prüfen und löschen (nur .rar behalten). # 3) Ordner mit 'Kopie' im Namen auflisten und ggf. löschen. # 4) Ordner mit 'Nachscan' im Namen auflisten und ggf. löschen. # 5) `.rar`-Dateien in den ersten zwei Verzeichnisebenen prüfen und ggf. löschen. # 6) Beenden des Skripts. # # 4. Funktionsweise der einzelnen Optionen: # - **Option 1:** # Sucht nach '3D'-Ordnern und listet alle Inhalte auf. Der Benutzer wird gefragt, ob alle # Inhalte (inklusive `.rar`-Dateien) gelöscht werden sollen. # - **Option 2:** # Sucht nach 'Documentation'-Ordnern. Alle Dateien und Unterordner außer `.rar`-Dateien # können auf Wunsch gelöscht werden. # - **Option 3:** # Listet alle Ordner mit 'Kopie' im Namen auf. Der Benutzer entscheidet, ob jeder Ordner # gelöscht werden soll. # - **Option 4:** # Listet alle Ordner mit 'Nachscan' im Namen auf. Der Benutzer entscheidet, ob jeder # Ordner gelöscht werden soll. # - **Option 5:** # Prüft die ersten zwei Verzeichnisebenen des Zielverzeichnisses auf `.rar`-Dateien. # Gefundene `.rar`-Dateien können gelöscht werden. # # 5. Cache-Aktualisierung: # - Nach jedem Löschvorgang wird geprüft, ob die gelöschten Ordner noch in der Cache-Datei # vorhanden sind. Falls ja, wird die Cache-Datei automatisch aktualisiert. # # 6. Beenden: # - Wenn die Option "Beenden" gewählt wird, wird das Skript ordnungsgemäß beendet. # - Offene Aktionen oder temporäre Daten werden gelöscht. # # --------------------------------------------- # Erweiterungsmöglichkeiten: # --------------------------------------------- # - Integration von Protokolldateien zur langfristigen Nachverfolgung der Aktionen. # - Erweiterung der Suchkriterien für spezifische Dateien oder Ordner. # - Automatische Sicherung gelöschter Inhalte in einem separaten Verzeichnis. # ----------------------------------------------------------- #!/bin/bash # Standardpfad DEFAULT_PATH="/mnt/synology/aufmasse/2024" CACHE_FILE="/tmp/verz_checker_cache.txt" # Zielverzeichnis prüfen und setzen TARGET_DIR=${1:-$DEFAULT_PATH} if [[ ! -d "$TARGET_DIR" ]]; then echo "Fehler: Zielverzeichnis '$TARGET_DIR' existiert nicht." exit 1 fi # Cache-Datei an Zielverzeichnis anpassen CACHE_FILE="/tmp/verz_checker_cache_$(echo "$TARGET_DIR" | md5sum | awk '{print $1}').txt" generate_or_use_cache() { if [[ -f "$CACHE_FILE" ]]; then while true; do echo -n "Möchten Sie die gespeicherte Ordnerliste verwenden? (y/n): " > /dev/tty read -r use_cache < /dev/tty case $use_cache in [Yy]) echo "Verwende die gespeicherte Ordnerliste."; return ;; [Nn]) echo "Generiere eine neue Ordnerliste..."; find "$TARGET_DIR" -type d > "$CACHE_FILE"; echo "Neue Ordnerliste gespeichert."; return ;; *) echo "Ungültige Eingabe. Bitte 'y' oder 'n' eingeben." ;; esac done else echo "Generiere eine neue Ordnerliste..." find "$TARGET_DIR" -type d > "$CACHE_FILE" echo "Neue Ordnerliste gespeichert." fi } check_root_rars() { echo "Prüfe auf RAR-Dateien in der ersten Verzeichnisebene von '$TARGET_DIR'..." # Suche nur nach RAR-Dateien im Stammverzeichnis rar_files=$(find "$TARGET_DIR" -maxdepth 2 -type f -iname "*.rar") if [[ -z "$rar_files" ]]; then echo "Keine RAR-Dateien gefunden." return fi # Zeige die gefundenen RAR-Dateien an echo "Gefundene RAR-Dateien im Stammverzeichnis:" echo "$rar_files" # Frage den Benutzer, ob er die Dateien löschen möchte while true; do echo -n "Möchten Sie diese RAR-Dateien löschen? (y/n): " > /dev/tty read -r choice < /dev/tty case $choice in [Yy]) # Lösche nur die gefundenen RAR-Dateien echo "$rar_files" | xargs -d '\n' rm -v echo "RAR-Dateien wurden gelöscht." break ;; [Nn]) echo "RAR-Dateien bleiben bestehen." break ;; *) echo "Ungültige Eingabe. Bitte 'y' oder 'n' eingeben." ;; esac done } delete_folder_if_exists() { local folder=$1 if [[ -d "$folder" ]]; then echo "Lösche Ordner und alle Unterordner: $folder" rm -rv "$folder" else echo "Überspringe: Ordner '$folder' existiert nicht mehr." fi } process_3d_folders() { echo "Prüfe '3D'-Ordner..." grep -i "/3d$" "$CACHE_FILE" | while IFS= read -r dir; do # Überspringen, wenn Ordner nicht existiert if [[ ! -d "$dir" ]]; then echo "Überspringe: Ordner '$dir' existiert nicht mehr." continue fi rar_files=$(find "$dir" -maxdepth 1 -type f -iname "*.rar") other_files=$(find "$dir" -mindepth 1 -type f -not -iname "*.rar") subdirs=$(find "$dir" -mindepth 1 -type d) if [[ -z "$rar_files" && -z "$other_files" && -z "$subdirs" ]]; then continue; fi echo -e "\nVerarbeite 3D-Ordner: $dir" [[ -n "$rar_files" ]] && echo "Gefundene RAR-Dateien:" && echo "$rar_files" [[ -n "$other_files" ]] && echo "Andere Dateien:" && echo "$other_files" [[ -n "$subdirs" ]] && echo "Unterordner:" && echo "$subdirs" while true; do echo -n "Möchten Sie alle Inhalte löschen (einschließlich .rar-Dateien)? (y/n): " > /dev/tty read -r choice < /dev/tty case $choice in [Yy]) delete_folder_if_exists "$dir" break ;; [Nn]) echo "Inhalte bleiben bestehen."; break ;; *) echo "Ungültige Eingabe. Bitte 'y' oder 'n' eingeben." ;; esac done done } process_documentation_folders() { echo "Prüfe 'Documentation'-Ordner..." grep -i "/documentation$" "$CACHE_FILE" | while IFS= read -r dir; do if [[ ! -d "$dir" ]]; then echo "Überspringe: Ordner '$dir' existiert nicht mehr." continue fi rar_files=$(find "$dir" -maxdepth 1 -type f -iname "*.rar") other_files=$(find "$dir" -mindepth 1 -type f -not -iname "*.rar") subdirs=$(find "$dir" -mindepth 1 -type d) if [[ -z "$other_files" && -z "$subdirs" ]]; then continue; fi echo -e "\nVerarbeite Documentation-Ordner: $dir" [[ -n "$rar_files" ]] && echo "Gefundene RAR-Dateien:" && echo "$rar_files" [[ -n "$other_files" ]] && echo "Andere Dateien:" && echo "$other_files" [[ -n "$subdirs" ]] && echo "Unterordner:" && echo "$subdirs" while true; do echo -n "Nicht-RAR-Inhalte löschen? (y/n): " > /dev/tty read -r choice < /dev/tty case $choice in [Yy]) delete_folder_if_exists "$dir" break ;; [Nn]) echo "Inhalte bleiben bestehen."; break ;; *) echo "Ungültige Eingabe. Bitte 'y' oder 'n' eingeben." ;; esac done done } process_copy_folders() { echo "Prüfe Ordner mit 'Kopie'..." grep -i "kopie" "$CACHE_FILE" | while IFS= read -r dir; do if [[ ! -d "$dir" ]]; then echo "Überspringe: Ordner '$dir' existiert nicht mehr." continue fi echo "Gefunden: $dir" while true; do echo -n "Ordner löschen? (y/n): " > /dev/tty read -r choice < /dev/tty case $choice in [Yy]) delete_folder_if_exists "$dir"; break ;; [Nn]) echo "Bleibt."; break ;; *) echo "Ungültige Eingabe." ;; esac done done } process_nachscan_folders() { echo "Prüfe Ordner mit 'Nachscan'..." grep -i "nachscan" "$CACHE_FILE" | while IFS= read -r dir; do if [[ ! -d "$dir" ]]; then echo "Überspringe: Ordner '$dir' existiert nicht mehr." continue fi echo "Gefunden: $dir" while true; do echo -n "Ordner löschen? (y/n): " > /dev/tty read -r choice < /dev/tty case $choice in [Yy]) delete_folder_if_exists "$dir"; break ;; [Nn]) echo "Bleibt."; break ;; *) echo "Ungültige Eingabe." ;; esac done done } main_menu() { while true; do echo -e "\nOptionen:" echo "1) RAR-Dateien und Verzeichnisse in '3D'-Ordnern prüfen und ggf. löschen." echo "2) Dateien und Verzeichnisse in 'Documentation'-Ordnern prüfen und löschen (nur .rar behalten)." echo "3) Ordner mit 'Kopie' im Namen auflisten und ggf. löschen." echo "4) Ordner mit 'Nachscan' im Namen auflisten und ggf. löschen." echo "5) RAR-Dateien in der ersten Verzeichnisebene prüfen und ggf. löschen." echo "6) Beenden." echo -n "Wählen Sie eine Option (1-6): " > /dev/tty read -r option < /dev/tty case $option in 1) process_3d_folders ;; 2) process_documentation_folders ;; 3) process_copy_folders ;; 4) process_nachscan_folders ;; 5) check_root_rars ;; 6) echo "Beende Programm."; break ;; *) echo "Ungültige Auswahl." ;; esac done } generate_or_use_cache main_menu