From 14aef06fa8ad4e9d28efbe5df131ea422f5a104c Mon Sep 17 00:00:00 2001 From: Will Budic Date: Fri, 18 Jul 2025 00:33:34 +1000 Subject: [PATCH] cron job to run every day to keep latest backups only. --- delete_older_backups.pl | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 delete_older_backups.pl diff --git a/delete_older_backups.pl b/delete_older_backups.pl new file mode 100755 index 0000000..c63efc4 --- /dev/null +++ b/delete_older_backups.pl @@ -0,0 +1,42 @@ +#!/usr/bin/env perl +use DateTime; +use File::stat; +use feature 'say'; + + +my ($BACKUPS, $PREFIX, $DAYS) = ('/home/will/backups','nomad-', 8); + +my $dt = DateTime->now(time_zone => "local"); +my $dtBack = $dt -> subtract(days => $DAYS); + +opendir my($dh),$BACKUPS or die WHITE."Couldn't open dir '$BACKUPS':".RED." $!"; +my @files = grep { !/^\./ && /^$PREFIX/ } readdir($dh); +closedir $dh; + +say $dt->strftime("%Y-%m-%d %H:%M")." "."Files sel: ".@files." "; +exit unless @files > 2; + + +delete_extras(); +disk_space("/"); + +sub disk_space { + my $dir = shift; + my $date = $dt->strftime("%Y-%m-%d %H:%M"); + my $result = `df -h / |tail -n 1 | awk '{print "$date Dir: $dir Used: "\$3, \$5, "Avail:" \$4, "Cap: " \$2}'`; + $result =~ s/\s+$//g; + say $result; +} + +sub delete_extras { + foreach my $file (sort @files){ + my $info = stat("$BACKUPS/$file"); + if ($info->mtime < $dtBack->epoch){ + unlink "$BACKUPS/$file"; + say scalar localtime $info->mtime, " Deleted: $file"; + } + } +} + + + exit; -- 2.34.1