85 lines
2.7 KiB
Bash
Executable File
85 lines
2.7 KiB
Bash
Executable File
#!/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)" |