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>


Reply via email to