#!/usr/bin/perl use strict; my $numToKeep = shift || die "Usage: $0 \n"; my $dir = shift || die "Usage: $0 \n"; my $lookfor = '(?:journal|checkpoint)'; # Grab the files we want. opendir( D, $dir ) or die "can't open $dir: $!\n"; my @files = grep /\A$lookfor\.\d+\.gz\Z/ => readdir D; closedir D or die; chdir $dir or die "can't open $dir: $!\n"; my @journals = sort by_num grep /^journal/ => @files; my @checkpoints = sort by_num grep /^checkpoint/ => @files; if ( @journals > $numToKeep ) { splice( @journals, -$numToKeep ); my $numj = unlink @journals; warn "Not all journals were deleted: (" . join(" ", @journals) . ") $!\n" if $numj != @journals; } if ( @checkpoints > $numToKeep ) { splice( @checkpoints, -$numToKeep ); my $numc = unlink @checkpoints; warn "Not all checkpoints were deleted: (" . join(" ", @checkpoints) . ") $!\n" if $numc != @checkpoints; } sub by_num { my $numa = $a; my $numb = $b; $numa =~ s/[^\d+]//g; $numb =~ s/[^\d+]//g; return $numa <=> $numb; }