Khairul Azmi wrote:
>
> On 6/23/06, John Ackley <[EMAIL PROTECTED]> wrote:
>>
>> Khairul Azmi wrote:
>> > I have this problem. There is a script that stores log files into
>> > folders that follows structure of the following
>> >
>> > YYYY/MM/DD
>> >
>> > eg..
>> >
>> > /var/log/projects/2006/06/20/8231.tgz
>> > /var/log/project1/2006/06/21/1432.tgz
>> > /var/log/projects/2006/06/22/1756.tgz
>> > /var/log/projects/2006/06/23/1756.tgz
>> >
>> > Now I want to write a script that would erase all logs that has been
>> > stored except for the log for the current day. For the above example,
>> > since today is 23 June 2006, the code will erase log files in
>> > folders 2006/06/20/ and 2006/06/21/ only. Can somebody give ideas on
>> > how to do this. This script is to be ran once a day.
>>
>> #! /usr/bin/perl
>> use strict;
>> use warnings;
>> use Date::Manip;
>>
>> my $directory;
>> my $days = 2;
>> while( -d
>> ($directory =
>> UnixDate(DateCalc('today',"$days ago"),
>> '/var/log/projects/%Y/%m/%d')) ) {
>> unlink "$directory/*";
>> $days++;
>> }
>
> Thanks for the code. However it does not works as expected. My testing
> shows that the program will only unlink folders if the structure name
> of the folders falls exactly on the range.
>
> Say today is 16 August 2006. If I have only have this folder
>
> /var/log/project1/2006/08/08/8231.tgz
>
> The program does not works, unless I change the variable $days exactly
> to 8. What I need is a program that could unlink all folders except
> for today's.
use File::Basename;
use POSIX 'strftime';
my $root = '/var/log/projects';
my $today = strftime '%Y/%m/%d', localtime;
my @files = grep !m!^$root/$today!,
glob "$root/[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]/*.tgz";
for my $file ( @files ) {
unlink $file or warn "Cannot unlink '$file' $!";
for ( 1 .. 3 ) {
my $dir = dirname $file;
rmdir $dir; # ignore errors!
}
}
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>