Ich habe mir ein kleines Backupscript geschrieben, um mein Thunderbird-Profil, das auf einem NAS liegt, zu sichern. Das Ganze dauert ungefähr 2 Minuten. Beim Start des scripts speichere ich die aktuelle Zeit in einer Variable:
START=$(date +%s)
Nach dem Backup speichere ich wieder den aktuellen Zeitstempel:
ENDE=$(date +%s)
Bilde die Differenz und gebe sie aus:
DAUER=$((ENDE - START))
echo -e "Zeit für das Backup: $DAUER Sekunden.\n"
Oft funktioniert das auch tadellos, aber hin und wieder haut die bash Fahrkarten raus, so wie heute:
Code
Erstelle Backup...
Backup erfolgreich erstellt:
/home/uwe/Backup/thunderbird_backups/thunderbird_backup_2026-07-14_10-09-11.tar.gz
Die älteste Datei 'thunderbird_backup_2026-07-11_10-48-04.tar.gz' wurde gelöscht.
Zeit für das Backup: 7316 Sekunden.
Eine Taste drücken zum Beenden.
Da frage ich mich, wo ist mein Denkfehler? 🤔
Hier ist das komplette bash-Script:
Bash
#!/bin/bash
# Quell- und Zielverzeichnis
SOURCE="/home/uwe/NAS_Daten/.thunderbird"
BACKUP_DIR="$HOME/Backup/thunderbird_backups"
MINDESTANZAHL=3
# Zeitstempel
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
START=$(date +%s)
# Name der Sicherungsdatei
BACKUP_FILE="$BACKUP_DIR/thunderbird_backup_$DATE.tar.gz"
# Zielverzeichnis anlegen, falls nicht vorhanden
mkdir -p "$BACKUP_DIR"
# Prüfen, ob das NAS eingebunden ist
if [ ! -d "$SOURCE" ]; then
echo "Fehler: Quellverzeichnis '$SOURCE' existiert nicht."
exit 1
fi
# Backup erstellen
echo "Erstelle Backup..."
tar -czf "$BACKUP_FILE" -C "$(dirname "$SOURCE")" "$(basename "$SOURCE")"
# Ergebnis prüfen
if [ $? -eq 0 ]; then
echo "Backup erfolgreich erstellt:"
echo "$BACKUP_FILE"
else
echo "Fehler beim Erstellen des Backups."
exit 1
fi
# älteste Datei löschen, wenn weniger als 3 Dateien (Anzahl definierbar) vorhanden sind wird nichts gelöscht.
# Überprüfen, ob das Verzeichnis existiert
if [ ! -d "$BACKUP_DIR" ]; then
echo "Verzeichnis existiert nicht!"
exit 1
fi
# Array mit allen Dateien im Verzeichnis erstellen
shopt -s nullglob
dateien=("$BACKUP_DIR"/*)
# Prüfen, ob weniger als $MINDESTANZAHL+1 Dateien vorhanden sind
if [ "${#dateien[@]}" -lt $((MINDESTANZAHL+1)) ]; then
echo "Es sind nicht mehr als $MINDESTANZAHL Dateien vorhanden. Es wird nichts gelöscht."
exit 0
fi
aelteste_datei=$(ls -1t "$BACKUP_DIR" | tail -n 1)
if [ -n "$aelteste_datei" ]; then
rm "$BACKUP_DIR/$aelteste_datei"
echo "Die älteste Datei '$aelteste_datei' wurde gelöscht."
fi
ENDE=$(date +%s)
DAUER=$((ENDE - START))
echo -e "Zeit für das Backup: $DAUER Sekunden.\n"
# echo -e "$START | $ENDE \n"
# sleep 10
read -n 1 -s -r -p "Eine Taste drücken zum Beenden."
Display More