Dateien nach "/" hochladen

This commit is contained in:
sebastian.zell 2024-12-27 22:24:13 +00:00
parent 8913c04c80
commit 03ccdb1258
5 changed files with 738 additions and 0 deletions

107
ldap_beitritt.sh Normal file
View File

@ -0,0 +1,107 @@
#!/bin/bash
# Schritt 1: /etc/nslcd.conf erstellen oder ersetzen
echo "Erstelle oder ersetze /etc/nslcd.conf..."
cat <<EOF > /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 <<EOF > /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 "========================"

123
pack_all.sh Normal file
View File

@ -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."

151
packen.sh Normal file
View File

@ -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

48
synchronisieren.sh Normal file
View File

@ -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 <quelle> <serverziel> <zielpfad> [--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

309
verzeichnis_checker.sh Normal file
View File

@ -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