#!/bin/bash # Logfile definieren LOGFILE="$HOME/Library/Logs/backup-recordings.log" MAX_LOG_SIZE=$((3 * 1024 * 1024)) # 3MB in Bytes # Funktion zur Überprüfung und Rotation des Logfiles rotate_log() { if [ -f "$LOGFILE" ]; then local size=$(stat -f%z "$LOGFILE" 2>/dev/null || echo 0) if [ "$size" -ge "$MAX_LOG_SIZE" ]; then # Behalte nur die letzten 50% des Logs local keep_lines=$(($(wc -l < "$LOGFILE") / 2)) tail -n "$keep_lines" "$LOGFILE" > "${LOGFILE}.tmp" mv "${LOGFILE}.tmp" "$LOGFILE" fi fi } # Funktion für Log-Ausgaben mit Zeitstempel log() { local message="[$(date '+%Y-%m-%d %H:%M:%S')] $1" echo "$message" | tee -a "$LOGFILE" } # Funktion für macOS Benachrichtigungen notify() { local subtitle="$1" local message="$2" osascript -e "display notification \"$message\" with title \"Backup Recordings\" subtitle \"$subtitle\"" } # Log rotieren falls nötig rotate_log # Quelle und Ziel definieren SOURCE="/Users/rob/Recordings/Work/00_MacOS" TARGET="/Volumes/rob/recordings/Progress/Work/" MOUNT_POINT="/Volumes/rob" SERVER_ADDRESS="smb://bfds/rob" # Prüfen, ob das Netzlaufwerk gemountet ist if mount | grep -q "$MOUNT_POINT"; then log "Netzlaufwerk ist gemountet. Backup startet..." else log "Netzlaufwerk nicht gefunden. Versuche zu mounten..." osascript -e "mount volume \"$SERVER_ADDRESS\"" # Nach dem Mounten erneut prüfen if mount | grep -q "$MOUNT_POINT"; then log "Netzlaufwerk erfolgreich gemountet." else log "Fehler: Netzlaufwerk konnte nicht gemountet werden." notify "Fehler" "Server nicht erreichbar!\nRecordings -> BFDS" exit 1 fi fi # Sicherung starten log "Starte rsync..." RSYNC_OUTPUT=$(mktemp) rsync -v -r -l -t -D --stats "$SOURCE" "$TARGET" 2>&1 | tee -a "$LOGFILE" > "$RSYNC_OUTPUT" # -r → Rekursiv kopieren (alle Unterordner & Dateien) # -l → Symbolische Links kopieren # -t → Zeitstempel beibehalten # -D → Geräte- und Sonderdateien kopieren # --stats → Statistiken anzeigen # Statistiken auslesen TOTAL_FILES=$(grep "Number of regular files transferred:" "$RSYNC_OUTPUT" | awk '{print $6}' | tr -d ',') TOTAL_SIZE=$(grep "Total transferred file size:" "$RSYNC_OUTPUT" | awk '{print $5, $6}') # Fallback falls keine Werte gefunden wurden [ -z "$TOTAL_FILES" ] && TOTAL_FILES="0" [ -z "$TOTAL_SIZE" ] && TOTAL_SIZE="0 bytes" # Temporäre Datei löschen rm -f "$RSYNC_OUTPUT" # Erfolgsmeldung ausgeben log "Backup abgeschlossen: $TOTAL_FILES Dateien, $TOTAL_SIZE übertragen" # Optional: Notification für macOS anzeigen notify "Abgeschlossen" "$TOTAL_FILES Dateien übertragen ($TOTAL_SIZE)"