diff --git a/ldap_beitritt.sh b/ldap_beitritt.sh new file mode 100644 index 0000000..bad40e5 --- /dev/null +++ b/ldap_beitritt.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +# Schritt 1: /etc/nslcd.conf erstellen oder ersetzen +echo "Erstelle oder ersetze /etc/nslcd.conf..." +cat < /etc/nslcd.conf +# nslcd configuration file. See nslcd.conf(5) for details. + +# The user and group nslcd should run as. +uid nslcd +gid nslcd + +# The location at which the LDAP server(s) should be reachable. +uri ldap://192.168.174.101:7389 + +# The search base that will be used for all queries. +base dc=zell-aufmass,dc=de + +# The DN to bind with for normal lookups. +binddn uid=Administrator,cn=users,dc=zell-aufmass,dc=de +bindpw 6%&6DdWMLzjS^i +scope sub + +# SSL options +tls_cacertfile /etc/ssl/certs/ca-certificates.crt +EOF + +# Schritt 2: System aktualisieren und grundlegende Pakete installieren +echo "Aktualisiere die Paketlisten und installiere grundlegende LDAP-Pakete..." +apt-get update && apt-get upgrade -y +apt-get install -y webmin-ldap-useradmin webmin-ldap-client ldap-utils libnss-ldap libpam-ldap + +# Schritt 3: Hinweis zur Webmin-Konfiguration +echo -e "\n========================" +echo "Webmin-Setup benötigt:" +echo "Bitte initialisiere LDAP in Webmin manuell. Danach kann das Skript fortgesetzt werden." +echo "Drücke ENTER, wenn der LDAP-Setup abgeschlossen ist." +echo "========================" +read -p "" + +# Schritt 4: /etc/nsswitch.conf anpassen +echo "Passe /etc/nsswitch.conf an..." +NSS_CONF="/etc/nsswitch.conf" +if [[ -f "$NSS_CONF" ]]; then + sed -i '/^passwd:/!b;/ ldap/! s/$/ ldap/' "$NSS_CONF" + sed -i '/^group:/!b;/ ldap/! s/$/ ldap/' "$NSS_CONF" + sed -i '/^shadow:/!b;/ ldap/! s/$/ ldap/' "$NSS_CONF" +else + echo "WARNUNG: Datei $NSS_CONF nicht gefunden!" +fi + +# Schritt 5: /etc/ldap/ldap.conf erstellen oder ersetzen +echo "Erstelle oder ersetze /etc/ldap.conf..." +cat < /etc/ldap.conf +base dc=zell-aufmass,dc=de +uri ldap://192.168.174.101:7389/ +TLS_CACERT /etc/ssl/certs/ca-certificates.crt +binddn uid=Administrator,cn=users,dc=zell-aufmass,dc=de +bindpw 6%&6DdWMLzjS^i +nss_base_passwd cn=users,dc=zell-aufmass,dc=de +nss_base_shadow cn=users,dc=zell-aufmass,dc=de +nss_base_group cn=groups,dc=zell-aufmass,dc=de +EOF + +# Schritt 6: Installiere nslcd und nscd +echo "Installiere nslcd und nscd..." +apt-get install -y nslcd nscd + +# Schritt 7: Berechtigungen für /etc/nslcd.conf setzen +echo "Setze Berechtigungen für /etc/nslcd.conf..." +chmod 600 /etc/nslcd.conf +chown root:root /etc/nslcd.conf + +# Schritt 8: nslcd-Dienst neu starten +echo "Starte den nslcd-Dienst neu..." +systemctl restart nslcd + +# Schritt 9: libpam-mkhomedir installieren +echo "Installiere libpam-mkhomedir..." +apt-get install -y libpam-mkhomedir + +# Schritt 10: /etc/pam.d/common-session und /etc/pam.d/common-session-noninteractive anpassen +echo "Passe PAM-Konfigurationen an..." +for FILE in /etc/pam.d/common-session /etc/pam.d/common-session-noninteractive; do + if [[ -f "$FILE" ]]; then + if ! grep -q "pam_mkhomedir.so" "$FILE"; then + echo "session required pam_mkhomedir.so skel=/etc/skel umask=0022" >> "$FILE" + fi + else + echo "WARNUNG: Datei $FILE nicht gefunden!" + fi +done + +# Schritt 11: Erstelle und konfiguriere /srv/shared +echo "Erstelle und konfiguriere /srv/shared..." +mkdir -p /srv/shared +chown :ldapgroup /srv/shared +chmod 775 /srv/shared + +# Schritt 12: Konfiguration testen +echo "Teste die Konfiguration mit 'getent passwd'..." +getent passwd + + + +echo -e "\n========================" +echo "Skript abgeschlossen. Bitte überprüfe die Konfiguration manuell und melde Fehler." +echo "========================" diff --git a/pack_all.sh b/pack_all.sh new file mode 100644 index 0000000..7634a85 --- /dev/null +++ b/pack_all.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +# ========================================== +# Anleitung: pack_all.sh +# ========================================== +# Dieses Skript verarbeitet alle Verzeichnisse in einem angegebenen Quellordner. +# Es entscheidet für jedes Verzeichnis: +# 1. Ob es gepackt wird, oder +# 2. Ob es nur verschoben wird (falls es ausschließlich `.rar`-Dateien enthält). +# +# Ziel: Effiziente Verarbeitung und Archivierung aller Verzeichnisse in einem Zielverzeichnis. + +# ========================================== +# Verwendung: +# ========================================== +# Aufruf: +# ./pack_all.sh +# +# Beschreibung: +# Das Skript sucht automatisch nach allen Verzeichnissen im Quellverzeichnis +# (standardmäßig `/mnt/synology/aufmasse/autoupload`) und verarbeitet sie. +# +# Voraussetzungen: +# - Das Skript `packen.sh` muss vorhanden und funktionsfähig sein. +# - Das Quell- und Zielverzeichnis müssen definiert und zugänglich sein. +# +# Beispiel: +# ./pack_all.sh + +# ========================================== +# Ablaufplan: +# ========================================== +# 1. Überprüfen, ob das Quellverzeichnis (`SOURCE_DIR`) existiert. +# 2. Sicherstellen, dass das Zielverzeichnis (`DEST_DIR`) existiert (ggf. erstellen). +# 3. Iteration über alle Verzeichnisse im Quellverzeichnis: +# a) Prüfen, ob das Verzeichnis bereits im Zielverzeichnis existiert. +# - Falls ja: Verzeichnis wird übersprungen. +# - Falls nein: Das Verzeichnis wird an `packen.sh` übergeben. +# b) Das `packen.sh`-Skript entscheidet, ob: +# - Das Verzeichnis gepackt wird, oder +# - Nur verschoben wird (falls nur `.rar`-Dateien enthalten sind). +# 4. Ausgabe einer Erfolgs- oder Fehlermeldung pro Verzeichnis. +# 5. Abschlussmeldung, wenn alle Verzeichnisse verarbeitet wurden. + +# ========================================== +# Anpassung des Zielverzeichnisses: +# ========================================== +# Standardmäßig werden die verarbeiteten Verzeichnisse unter `/mnt/synology/aufmasse_archiv/` abgelegt. +# Um das Zielverzeichnis zu ändern: +# 1. Bearbeiten Sie die Zeile: +# DEST_DIR="/mnt/synology/aufmasse_archiv" +# 2. Ändern Sie den Pfad in das gewünschte Zielverzeichnis. +# 3. Beispiel: +# DEST_DIR="/backup/archiv" +# +# Das Quellverzeichnis kann auf ähnliche Weise angepasst werden: +# 1. Bearbeiten Sie die Zeile: +# SOURCE_DIR="/mnt/synology/aufmasse/autoupload" +# 2. Beispiel: +# SOURCE_DIR="/daten/eingang" + +# ========================================== +# Voraussetzungen: +# ========================================== +# - Das `packen.sh`-Skript muss vorhanden und funktionstüchtig sein. +# - Schreib- und Leserechte für Quell- und Zielverzeichnisse. +# - Skript benötigt Ausführungsrechte: +# chmod +x pack_all.sh +# +# ========================================== +# Ende der Anleitung +# ========================================== + +# Quell- und Zielverzeichnisse definieren +SOURCE_DIR="/mnt/synology/aufmasse/autoupload" +DEST_DIR="/mnt/synology/aufmasse_archiv" +PACKEN_SCRIPT="/root/packen.sh" + +# Überprüfen, ob das Quellverzeichnis existiert +if [ ! -d "$SOURCE_DIR" ]; then + echo "Fehler: Quellverzeichnis '$SOURCE_DIR' existiert nicht." + exit 1 +fi + +# Sicherstellen, dass das Zielverzeichnis existiert +if [ ! -d "$DEST_DIR" ]; then + mkdir -p "$DEST_DIR" || { echo "Fehler: Zielverzeichnis '$DEST_DIR' konnte nicht erstellt werden."; exit 1; } + echo "Zielverzeichnis '$DEST_DIR' wurde erstellt." +fi + +# Überprüfen, ob das packen.sh-Skript existiert +if [ ! -x "$PACKEN_SCRIPT" ]; then + echo "Fehler: Das Skript '$PACKEN_SCRIPT' ist nicht ausführbar oder existiert nicht." + exit 1 +fi + +# Alle Verzeichnisse im Quellverzeichnis verarbeiten +for DIR in "$SOURCE_DIR"/*/; do + # Prüfen, ob es sich um ein Verzeichnis handelt + if [ -d "$DIR" ]; then + BASENAME=$(basename "$DIR") + ZIELORDNER="$DEST_DIR/$BASENAME" + + # Prüfen, ob das Verzeichnis bereits im Zielverzeichnis existiert + if [ -d "$ZIELORDNER" ]; then + echo "Überspringe: Das Projekt '$BASENAME' existiert bereits im Zielverzeichnis '$DEST_DIR'." + continue + fi + + # Verzeichnis verarbeiten mit packen.sh + echo "Verarbeite: '$DIR'..." + "$PACKEN_SCRIPT" j "$DIR" + + # Fehlerprüfung + if [ $? -eq 0 ]; then + echo "Erfolgreich verarbeitet: '$DIR'." + else + echo "Fehler beim Verarbeiten von: '$DIR'." + fi + fi +done + +echo "Alle Verzeichnisse im Quellverzeichnis '$SOURCE_DIR' wurden verarbeitet." diff --git a/packen.sh b/packen.sh new file mode 100644 index 0000000..82fc4b5 --- /dev/null +++ b/packen.sh @@ -0,0 +1,151 @@ +# ========================================== +# Anleitung: packen.sh +# ========================================== +# Dieses Skript dient dazu, ein angegebenes Verzeichnis zu verarbeiten, indem es entscheidet, ob: +# 1. Das Verzeichnis gepackt werden soll, oder +# 2. Nur verschoben werden soll (falls es ausschließlich `.rar`-Dateien enthält). +# +# Ziel: Strukturierte Archivierung von Verzeichnissen in einem Zielverzeichnis. + +# ========================================== +# Verwendung: +# ========================================== +# Aufruf: +# ./packen.sh [j|n] /Pfad/zum/Verzeichnis/ +# +# Parameter: +# - `j`: Automatische Zustimmung für das Packen/Verschieben. +# - `n`: Keine Aktion ausführen, Skript wird beendet. +# - `/Pfad/zum/Verzeichnis/`: Pfad zum Verzeichnis, das verarbeitet werden soll. +# +# Beispiel: +# ./packen.sh j /mnt/synology/aufmasse/test/ + +# ========================================== +# Ablaufplan: +# ========================================== +# 1. Überprüfen, ob das Verzeichnis existiert und ob das Zielverzeichnis vorhanden ist (ggf. erstellen). +# 2. Prüfen, ob im Verzeichnis ausschließlich `.rar`-Dateien enthalten sind. +# a) Wenn ja: +# - `.rar`-Dateien ins Zielverzeichnis verschieben. +# - Ursprungsverzeichnis löschen, falls es leer ist. +# b) Wenn nein: +# - Verzeichnis in eine `.rar`-Datei packen und in das Zielverzeichnis verschieben. +# 3. Ausgabe einer Erfolgs- oder Fehlermeldung. + +# ========================================== +# Anpassung des Zielverzeichnisses: +# ========================================== +# Standardmäßig werden die gepackten/verarbeiteten Verzeichnisse unter `/mnt/synology/aufmasse_archiv/` abgelegt. +# Um das Zielverzeichnis zu ändern: +# 1. Bearbeiten Sie die Zeile: +# ZIELVERZEICHNIS="/mnt/synology/aufmasse_archiv" +# 2. Ändern Sie den Pfad in das gewünschte Zielverzeichnis. +# 3. Beispiel: +# ZIELVERZEICHNIS="/backup/archiv" +# +# ========================================== +# Voraussetzungen: +# ========================================== +# - RAR muss installiert sein: +# - Ubuntu/Debian: sudo apt-get install p7zip-full p7zip-rar +# - Zugriff auf die Quell- und Zielverzeichnisse. +# - Skript benötigt Ausführungsrechte: +# chmod +x packen.sh +# +# ========================================== +# Ende der Anleitung +# ========================================== + + +#!/bin/bash + +# Überprüfen, ob RAR installiert ist +if ! command -v rar &> /dev/null; then + echo "RAR ist nicht installiert." + echo "Bitte installieren Sie es mit:" + echo " - Ubuntu/Debian: sudo apt-get update && sudo apt-get install p7zip-full p7zip-rar" + exit 1 +fi + +# Überprüfen, ob genügend Argumente übergeben wurden +if [ $# -lt 2 ]; then + echo "Verwendung: $0 [j|n] /Pfad/zum/Verzeichnis/" + exit 1 +fi + +# Eingaben aus den Argumenten +ANTWORT="${1,,}" # Erstes Argument: j oder n, in Kleinbuchstaben konvertiert +VERZEICHNIS=$(realpath "$2") # Zweites Argument: Verzeichnis + +# Überprüfen, ob die Antwort korrekt ist +if [[ "$ANTWORT" != "j" && "$ANTWORT" != "n" ]]; then + echo "Ungültige Eingabe für die Antwort. Verwenden Sie 'j' oder 'n'." + exit 1 +fi + +# Überprüfen, ob das Verzeichnis existiert +if [ ! -d "$VERZEICHNIS" ]; then + echo "Das Verzeichnis '$VERZEICHNIS' existiert nicht." + exit 1 +fi + +# Verzeichnisname extrahieren +ARCHIVNAME=$(basename "$VERZEICHNIS") + +# Zielverzeichnis für das Archiv +ZIELVERZEICHNIS="/mnt/synology/aufmasse_archiv" + +# Sicherstellen, dass das Zielverzeichnis existiert +if [ ! -d "$ZIELVERZEICHNIS" ]; then + mkdir -p "$ZIELVERZEICHNIS" || { echo "Fehler beim Erstellen des Zielverzeichnisses."; exit 1; } + echo "Zielverzeichnis '$ZIELVERZEICHNIS' wurde erstellt." +fi + +# Zielverzeichnis für den spezifischen Ordner erstellen +NEUER_ORDNER="$ZIELVERZEICHNIS/$ARCHIVNAME" +if [ ! -d "$NEUER_ORDNER" ]; then + mkdir -p "$NEUER_ORDNER" || { echo "Fehler beim Erstellen des Verzeichnisses '$NEUER_ORDNER'."; exit 1; } + echo "Neues Verzeichnis '$NEUER_ORDNER' wurde erstellt." +fi + +# Prüfen, ob sich im Verzeichnis nur .rar-Dateien befinden +echo "Überprüfe den Inhalt des Verzeichnisses '$VERZEICHNIS'..." +if find "$VERZEICHNIS" -type f ! -name '*.rar' -print -quit | grep -q .; then + # Andere Dateien oder Verzeichnisse gefunden – normal packen + if [[ "$ANTWORT" == "j" ]]; then + # In das übergeordnete Verzeichnis wechseln + cd "$(dirname "$VERZEICHNIS")" || { echo "Fehler beim Wechseln des Verzeichnisses."; exit 1; } + + # Zielarchiv definieren + ARCHIVPFAD="$NEUER_ORDNER/$ARCHIVNAME.rar" + + # RAR-Archiv erstellen, nur den Ordner selbst packen und das ursprüngliche Verzeichnis löschen + rar a -v1g -r -df "$ARCHIVPFAD" "$ARCHIVNAME" + + if [ $? -eq 0 ]; then + echo "Das Verzeichnis wurde erfolgreich in $ARCHIVPFAD gepackt und gelöscht." + else + echo "Fehler beim Erstellen des RAR-Archivs." + exit 1 + fi + else + echo "Keine Aktion ausgeführt, da die Antwort 'n' war." + exit 0 + fi +else + # Nur .rar-Dateien gefunden – verschieben, aber keine verschachtelten Ordner erstellen + echo "Das Verzeichnis '$VERZEICHNIS' enthält nur .rar-Dateien. Die Dateien werden direkt verschoben." + + # .rar-Dateien in das Zielverzeichnis verschieben + mv "$VERZEICHNIS"/*.rar "$NEUER_ORDNER/" + if [ $? -eq 0 ]; then + echo "Alle .rar-Dateien wurden erfolgreich nach '$NEUER_ORDNER' verschoben." + # Ursprüngliches Verzeichnis löschen, falls es leer ist + rmdir "$VERZEICHNIS" 2>/dev/null || echo "Das Verzeichnis '$VERZEICHNIS' konnte nicht gelöscht werden (möglicherweise nicht leer)." + else + echo "Fehler beim Verschieben der .rar-Dateien." + exit 1 + fi +fi + diff --git a/synchronisieren.sh b/synchronisieren.sh new file mode 100644 index 0000000..36c903e --- /dev/null +++ b/synchronisieren.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +chmod 600 /root/.ssh/id_rsa +# Parameter: Quelle, Zielserver, Zielpfad, Option +SOURCE_DIR="$1" +TARGET_SERVER="$2" +TARGET_PATH="$3" +OPTION="$4" + +if [ -z "$SOURCE_DIR" ] || [ -z "$TARGET_SERVER" ] || [ -z "$TARGET_PATH" ]; then + echo "Nutzung: $0 [--timestamps]" + echo " Ohne '--timestamps': Vollständige Synchronisation" + echo " Mit '--timestamps': Nur Zeitstempel synchronisieren" + exit 1 +fi + +# Prüfen, ob der SSH-Zugang ohne Passwort funktioniert +echo "Prüfe SSH-Verbindung zu $TARGET_SERVER..." +ssh -o BatchMode=yes root@$TARGET_SERVER "exit" +if [ $? -ne 0 ]; then + echo "SSH-Zugang zu $TARGET_SERVER ist nicht konfiguriert. Führe zuerst zertifikat_install.sh aus." + exit 1 +fi + +# Berechtigungen auf der Quelle setzen +echo "Setze Berechtigungen auf der Quelle..." +chmod -R 755 $SOURCE_DIR + +# Auswahl der Synchronisationsmethode +if [ "$OPTION" == "--timestamps" ]; then + echo "Synchronisiere nur Zeitstempel von $SOURCE_DIR nach $TARGET_SERVER:$TARGET_PATH..." + rsync -rt --existing --ignore-existing $SOURCE_DIR/ root@$TARGET_SERVER:$TARGET_PATH/ +else + echo "Starte vollständige Synchronisation von $SOURCE_DIR nach $TARGET_SERVER:$TARGET_PATH..." + rsync -avz --delete $SOURCE_DIR/ root@$TARGET_SERVER:$TARGET_PATH/ +fi + +# Berechtigungen auf dem Ziel setzen +echo "Setze Berechtigungen auf dem Ziel..." +ssh root@$TARGET_SERVER "chmod -R 755 $TARGET_PATH" + +# Prüfung auf Erfolg +if [ $? -eq 0 ]; then + echo "Synchronisation erfolgreich abgeschlossen und Berechtigungen korrekt gesetzt." +else + echo "Fehler bei der Synchronisation." + exit 1 +fi diff --git a/verzeichnis_checker.sh b/verzeichnis_checker.sh new file mode 100644 index 0000000..52a3fca --- /dev/null +++ b/verzeichnis_checker.sh @@ -0,0 +1,309 @@ +# ----------------------------------------------------------- +# 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