initial commit
This commit is contained in:
parent
7af9e9fff0
commit
cb96ca3cb3
@ -1,2 +1,5 @@
|
||||
# file-rentention
|
||||
|
||||
This script is intendet to be used to delete files, created by a backup-script for example. The rentention will be processes by a timeplan (days, weeks, months to keep).
|
||||
|
||||
More Information is available on the mentioned website.
|
155
backup-rentention.sh
Normal file
155
backup-rentention.sh
Normal file
@ -0,0 +1,155 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script:
|
||||
# Version: 1.0
|
||||
# Autor: Marco Morath
|
||||
# Lizenz: Gnu GPLv3 <https://www.gnu.org/licenses/gpl-3.0.html>
|
||||
|
||||
# Anwenderhinweis:
|
||||
# Wird der Parameter dryrun mit übergeben, wird keine Löschung durchgeführt. Es wird nur ermittelt, welche Dateien
|
||||
# gelöscht werden, wenn das Skript tatsächlich ausgeführt wird.
|
||||
|
||||
# Verzeichnis mit den Backups
|
||||
backup_dir="/mnt/backupfolder"
|
||||
|
||||
# Ältere Backups behalten: 14 tägliche, 13 wöchentliche, 12 monatliche
|
||||
daily_keep=14
|
||||
weekly_keep=13
|
||||
monthly_keep=12
|
||||
|
||||
# Log-Verzeichnis und -Datei
|
||||
log_dir="/home/user/logdirectory"
|
||||
log_file="$log_dir/$(date +%Y-%m-%d)-backup-retention.log"
|
||||
|
||||
# Logrotation
|
||||
log_files=($(ls -1tr $log_dir/*backup-retention*.log))
|
||||
log_keep=14
|
||||
|
||||
# Alte Logdateien löschen
|
||||
if [ ${#log_files[@]} -gt $log_keep ]; then
|
||||
for log in "${log_files[@]:0:$((${#log_files[@]} - $log_keep))}"; do
|
||||
echo "Lösche Logdatei: $log"
|
||||
rm -f "$log"
|
||||
done
|
||||
fi
|
||||
|
||||
# Neues Logfile erstellen
|
||||
touch "$log_file"
|
||||
|
||||
# Liste der Backups in umgekehrter Reihenfolge nach Erstellungsdatum (älteste zuerst)
|
||||
backups=($(ls -1tr --time=ctime $backup_dir))
|
||||
|
||||
# Arrays für die zu behaltenden Backups
|
||||
daily_backups=()
|
||||
weekly_backups=()
|
||||
monthly_backups=()
|
||||
|
||||
# Datumswerte
|
||||
today_in_seconds=$(date +%s)
|
||||
daily_oldest_in_seconds=$(( $today_in_seconds - ( 86400 * $daily_keep ) ))
|
||||
weekly_oldest_in_seconds=$(( $today_in_seconds - ( 86400 * 7 * $weekly_keep ) ))
|
||||
monthly_oldest_in_seconds=$(( $today_in_seconds - ( 86400 * 30 * $monthly_keep ) ))
|
||||
|
||||
# Funktion, um die Woche eines Datums zu berechnen
|
||||
get_week_of_year() {
|
||||
date -d "@$1" +%Y-%V
|
||||
}
|
||||
|
||||
# Funktion, um den Monat eines Datums zu berechnen
|
||||
get_month_of_year() {
|
||||
date -d "@$1" +%Y-%m
|
||||
}
|
||||
|
||||
# Backup-Kategorisierung
|
||||
declare -A weekly_latest
|
||||
declare -A monthly_latest
|
||||
|
||||
for backup in "${backups[@]}"; do
|
||||
backup_date_seconds=$(stat -c %Y "$backup_dir/$backup")
|
||||
|
||||
if [ $backup_date_seconds -ge $daily_oldest_in_seconds ]; then
|
||||
daily_backups+=($backup)
|
||||
|
||||
elif [ $backup_date_seconds -ge $weekly_oldest_in_seconds ]; then
|
||||
week_of_year=$(get_week_of_year $backup_date_seconds)
|
||||
if [[ -z "${weekly_latest[$week_of_year]}" || $backup_date_seconds -gt $(stat -c %Y "$backup_dir/${weekly_latest[$week_of_year]}") ]]; then
|
||||
weekly_latest[$week_of_year]=$backup
|
||||
fi
|
||||
|
||||
elif [ $backup_date_seconds -ge $monthly_oldest_in_seconds ]; then
|
||||
month_of_year=$(get_month_of_year $backup_date_seconds)
|
||||
if [[ -z "${monthly_latest[$month_of_year]}" || $backup_date_seconds -gt $(stat -c %Y "$backup_dir/${monthly_latest[$month_of_year]}") ]]; then
|
||||
monthly_latest[$month_of_year]=$backup
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
# Jüngste wöchentliche und monatliche Backups in Arrays speichern
|
||||
for backup in "${weekly_latest[@]}"; do
|
||||
weekly_backups+=($backup)
|
||||
done
|
||||
|
||||
for backup in "${monthly_latest[@]}"; do
|
||||
monthly_backups+=($backup)
|
||||
done
|
||||
|
||||
# Alle zu behaltenden Backups zusammenführen
|
||||
keep_backups=("${daily_backups[@]}" "${weekly_backups[@]}" "${monthly_backups[@]}")
|
||||
|
||||
# Funktion zum Protokollieren
|
||||
log() {
|
||||
echo "$1" | tee -a "$log_file"
|
||||
}
|
||||
|
||||
# Beginn des Vorgangs dokumentieren
|
||||
log "##### Bereinigung begonnen ( $(date +"%d-%m-%Y %H:%M:%S") ) #####"
|
||||
|
||||
# Überprüfen, ob der Parameter "dryrun" gesetzt ist
|
||||
dryrun=false
|
||||
if [ "$1" == "dryrun" ]; then
|
||||
dryrun=true
|
||||
log "Dry run aktiviert: Es werden keine Backups gelöscht."
|
||||
fi
|
||||
|
||||
# Backups zum Behalten ermitteln
|
||||
echo "==== Zu behaltende Backups ===="
|
||||
number=0
|
||||
for backup in "${backups[@]}"; do
|
||||
if [[ " ${keep_backups[@]} " =~ " $backup " ]]; then
|
||||
|
||||
number=$(($number+1))
|
||||
if $dryrun; then
|
||||
log "$number Würde behalten: $backup"
|
||||
|
||||
else
|
||||
log "$number Behalte Backup: $backup"
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
# Backups zum Löschen ermitteln
|
||||
echo "==== Zu löschende Backups ===="
|
||||
number=0
|
||||
for backup in "${backups[@]}"; do
|
||||
if [[ ! " ${keep_backups[@]} " =~ " $backup " ]]; then
|
||||
|
||||
number=$(($number+1))
|
||||
if $dryrun; then
|
||||
log "$number Würde löschen: $backup"
|
||||
|
||||
else
|
||||
log "$number Lösche Backup: $backup"
|
||||
rm -f "$backup_dir/$backup"
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
log "##### Backup-Bereinigung abgeschlossen ( $(date +"%d-%m-%Y %H:%M:%S") ) #####"
|
Loading…
x
Reference in New Issue
Block a user