Dateien nach "/" hochladen
This commit is contained in:
parent
8913c04c80
commit
03ccdb1258
|
|
@ -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 "========================"
|
||||||
|
|
@ -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."
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
Loading…
Reference in New Issue