John W. Krahn wrote:
> 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!

          $file = $dir;

>         }
>     }



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