#!/usr/bin/perl # # delbut # jms1 2003-07-18 # # from cron.cutsyslog jms1 1999-04-05 # # deletes all but a certain number of files. depends on the shell to expand # filename globs. # # 2005-04-09 jms1 - changed copyright notice to indicate my intention # that this code is licensed under GPL version 2 only, rather than # GPL version 2 "or later". # ############################################################################### # # Copyright (C) 1999-2005 John Simpson. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License, version 2, as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # or visit http://www.gnu.org/licenses/gpl.txt # ############################################################################### require 5.003 ; use strict ; use Carp ; ############################################################################### # # configuration my $live = 0 ; # if first arg is positive, show commands # if first arg is negative, kill the files ############################################################################### ############################################################################### ############################################################################### # # let's do it my $count = ( shift || die "No count specified.\n" ) ; if ( $count < 0 ) { $live = 1 ; $count = - $count ; } my @files = () ; while ( my $name = shift ) { push ( @files , $name ) ; } @files = reverse sort @files ; while ( $count && ( $#files > -1 ) ) { $count -- ; my $name = shift @files ; # print "Ignoring $name\n" ; } while ( my $name = ( shift @files || "" ) ) { print "Deleting $name\n" ; $live && unlink $name ; }