Ich erstelle auf dem Synology Server jeden Tag eine gezippte Datei mit einem Archiv, die Datenmenge wächst recht schnell und es werden nicht alle Backups benötigt. So muss ich irgendwann, wenn der SYNO Server zugelaufen ist, viele Dateien löschen. Nun möchte ich aber von jedem Monat drei Dateien 1. 10. und 30. behalten und in ein anderes Monatsverzeichnis verschieben, die anderen Dateien löschen.
Das ist ein klassisches Szenario für ein automatisiertes Bash-Skript. Da dein Synology-Server auf Linux basiert, kannst du das direkt über den Aufgabenplaner (Task Scheduler) lösen.
Anstatt manuell zu löschen, nutzen wir ein Skript, das die Logik „Behalte den 1., 10. und 30.“ prüft, diese Dateien verschiebt und den Rest aufräumt.
Die Strategie
Wir gehen davon aus, dass das Datum im Dateinamen steht (z. B. backup_2025-12-01.zip). Falls nicht, nutzt das Skript das Dateidatum des Systems.
Hier ist ein Entwurf für ein Bash-Skript, das du auf deine Pfade anpassen kannst:
Bash
#!/bin/bash
# PFADE ANPASSEN
SOURCE_DIR="/volume1/Backup/Tages-Backups"
ARCHIVE_BASE="/volume1/Backup/Monats-Archiv"
# In das Verzeichnis wechseln
cd "$SOURCE_DIR" || exit
for file in *.zip; do
# Extrahiere Tag und Monat (Format abhängig von deinem Dateinamen)
# Beispiel für Format: backup_YYYY-MM-DD.zip
# Wir nutzen hier das Änderungsdatum der Datei, falls der Name kein Datum hat:
DAY=$(date -r "$file" +%d)
MONTH=$(date -r "$file" +%m)
YEAR=$(date -r "$file" +%Y)
TARGET_DIR="$ARCHIVE_BASE/$YEAR-$MONTH"
# Prüfen, ob der Tag der 01, 10, oder 30 ist
if [[ "$DAY" == "01" || "$DAY" == "10" || "$DAY" == "30" ]]; then
echo "Behalte $file - verschiebe nach $TARGET_DIR"
mkdir -p "$TARGET_DIR"
mv "$file" "$TARGET_DIR/"
else
# Optional: Nur löschen, wenn die Datei älter als X Tage ist,
# damit aktuelle Backups des laufenden Monats noch da bleiben
echo "Lösche $file"
rm "$file"
fi
done
So richtest du es auf der Synology ein
- Skript speichern: Kopiere den Code in eine Textdatei (z. B.
cleanup.sh) und speichere sie in einem gemeinsamen Ordner auf der Synology. - Aufgabenplaner öffnen:
- Gehe zu Systemsteuerung > Aufgabenplaner.
- Erstellen > Geplante Aufgabe > Benutzerdefiniertes Skript.
- Einstellungen:
- Allgemein: Gib der Aufgabe einen Namen (z. B. „Backup Cleanup“) und wähle den Benutzer
root. - Zeitplan: Wähle z. B. „Täglich“ oder „Wöchentlich“.
- Aufgabeneinstellungen: Gib unter „Benutzerdefiniertes Skript“ den Pfad zu deiner Datei an, z. B.:
bash /volume1/scripts/cleanup.sh
- Allgemein: Gib der Aufgabe einen Namen (z. B. „Backup Cleanup“) und wähle den Benutzer
Wichtige Hinweise zur Sicherheit
- Testlauf: Erstelle erst einen Testordner mit leeren Dummy-Dateien, um zu prüfen, ob das Skript die richtigen Tage auswählt.
- Der 30. des Monats: Beachte, dass der Februar keinen 30. hat. Wenn du sichergehen willst, dass aus jedem Monat drei Dateien übrig bleiben, könntest du die Logik auf „01, 10, 20“ oder „01, 10 und die letzte Datei des Monats“ ändern.
- Alternative (Snapshot Replication): Falls dein Synology-Volume im Btrfs-Format angelegt ist, empfehle ich dir die App Snapshot Replication. Dort kannst du „Aufbewahrungsregeln“ (Retention Policies) einstellen, die genau das automatisch machen (z. B. „Behalte 1 Snapshot pro Woche für X Monate“), ohne dass du manuell Dateien verschieben musst.