#!perl use warnings; use strict; my $backup_dir="f:/"; my $ofile = "${backup_dir}/backup.bkf"; my $max_size = 1_500_307_464_192; my $max_fill_level = 0.75; sub renameNewBackup { if ( -d $backup_dir && -f $ofile) { my $ctime = (stat(_))[10]; my @date = localtime($ctime); my $nfile = sprintf "${backup_dir}Backup_%04d-%02d-%02d-%02d%02d.bkf", $date[5] +1900, $date[4] + 1, $date[3], $date[2], $date[1]; printf "Renaming '$ofile' to '$nfile'\n"; if (rename $ofile, $nfile) { print "Renamed '$ofile' to '$nfile'\n"; } else { print "Error occured while renaming '$ofile' to '$nfile'\n"; } } } sub removeOldBackups { my @backups = reverse sort <${backup_dir}/Backup*.bkf>; my $quota = $max_fill_level * $max_size; my $fill_value = 0; for my $backup (@backups) { my $size = (stat($backup))[7]; $fill_value += $size; print "$backup ($size; $fill_value)\n"; if ($fill_value >= $quota && $backup !~ m/$ofile$/i) { print "unlink $backup\n"; unlink $backup; } } my $capacity = $fill_value / $max_size * 100; printf "total %.2d GB (max. %.2d GB, %2d%%)\n", $fill_value / (1024 ** 3), $max_size / (1024 ** 3), $capacity; } renameNewBackup; removeOldBackups;