#!/bin/bash # removeOldBackups version #VERSION# [ -r "#ETCDIR#/backup.conf" ] && \ . "#ETCDIR#/backup.conf" usage () { >&2 echo \ 'Usage: removeOldBackups Remove old backups keeping only one backup per month for all but the present year. Options: #HELPTEXT# #' [ -n "$1" ] && exit $1 exit 1 } if [ $# -eq 1 ] then if [ "$1" == "--help" ] then usage 0 elif [ "$1" == "--version" ] then >&2 echo '#VERSION#' exit 0 fi usage elif [ $# -gt 1 ] then usage fi backups=$( printf '%s\n' "${backups[@]}" | \ cut -d' ' -f1 | \ while read -r dir; do \ if [ $(ls "$dir" | wc -l) -lt 30 ]; then continue; fi ls -1 "$dir" | \ sed -n ' s,^\([0-9]\{4\}\)_\([0-9]\{2\}\)_\([0-9]\{2\}\)$,'"${dir}"'\0 \3 \2 \1 '"${dir}"', T p ' done ) { printf '%s\n' "${backups}" | \ sort -k5,5 -k4,4 -k3,3 -k2,2 -k1,1 | \ uniq -f2 printf '%s\n' "${backups}" | \ sed ' / '"$(date +%Y)"' \S\+$/p ' } | \ cut -d' ' -f1 | \ sort | \ uniq -u | \ while read -r dir; do echo rm -rf --one-file-system "${dir}" rm -rf --one-file-system "${dir}" done