#!/usr/local/bin/perl our $VERSION = "0.1"; use strict; use Getopt::Std; our $TESTING = 0; our $GZIP = "/usr/bin/gzip"; our $KEEP = 50; $0 =~ s%.*/%%; use vars qw($opt_h $opt_v $opt_n $opt_z $opt_t); getopts('hvnzt'); die "$0 v$VERSION\n" if ($opt_v); die "Usage: $0 [-hvnzt]\n" if ($opt_h || scalar @ARGV eq 0); $KEEP = $opt_n if $opt_n; $TESTING ||= $opt_t; foreach (@ARGV) { $opt_z ? rotategz($_, $KEEP) : rotate($_, $KEEP); } sub rotate { my ($file, $tokeep) = @_; for (my $i = $tokeep; $i >= 0; $i--) { my $next = $i+1; next unless (-f "$file.$i"); if ($tokeep <= $i) { print " Removing $file.$i\n" ; unlink("$file.$i") unless $TESTING; } else { print " Renaming $file.$i to $file.$next\n"; rename("$file.$i", "$file.$next") unless $TESTING; } } if (-f $file) { if ($tokeep > 0) { print " Renaming $file to $file.1\n"; rename( $file, "$file.1" ) unless $TESTING; } else { print " Removing $file\n"; unlink ($file) unless $TESTING; } } } sub rotategz { my ($file, $tokeep) = @_; for (my $i = $tokeep; $i >= 0; $i--) { my $next = $i+1; next unless (-f "$file.$i.gz"); if ($tokeep <= $i) { print " Removing $file.$i.gz\n" ; unlink("$file.$i") unless $TESTING; } else { print " Renaming $file.$i.gz to $file.$next.gz\n"; rename("$file.$i.gz", "$file.$next.gz") unless $TESTING; } } if (-f $file) { if ($tokeep > 0) { print " Renaming $file to $file.1\n"; rename( $file, "$file.1" ) unless $TESTING; print " Gzipping '$file.1'\n"; system("gzip $file.1") unless $TESTING; } else { print " Removing $file\n"; unlink ($file) unless $TESTING; } } }