Aruna Goke wrote:
> 
> I put up a small script to delete old logs and at the same time rotating
> the logs. on my squid log directory ( I can use logrorate and unlink the
> logs, but I choose to test my ability to do that)
> 
> however, with my code below, I can see delete the old logs, however, the
> output of the log the squid rotated is not included when the unlink is
> being executed.
> 
> after runing the script, I will still find the newly rotated logs like
> access.log.0, store.log.0 etc in the directory.
> 
> I will be glad for any assisstance including hash comment
> 
> #!/usr/bin/perl
> #
> use warnings;
> use strict;
> use diagnostics;
> use Time::HiRes;
> #
> my ($fname, @si);
> ##read the content of the directory and check there sizes.
> opendir DIR, '/var/log/squid' or die "ko ri direk3 si: $!";
> while($fname=readdir(DIR)){
>     my @si = stat($fname);

You are trying to stat() a file in the current directory but the file is
actually in the /var/log/squid directory:

    my @si = stat "/var/log/squid/$fname";


>         next, if $fname=~m/^[\.|\.\.]/;

You are using a character class so duplicate characters are ignored and only
the two characters '.' and '|' are included so that could be simplified to:

        next if $fname =~ /^[.|]/;

Although you probably meant to use alternation instead:

        next if $fname =~ /^(?:\.|\.\.)/;

But even there the second alternative will *never* match so you could simplify
that to:

        next if $fname =~ /^\./;

Although what you *really* want would be something like:

        next if $fname =~ /\A(?:\.|\.\.)\z/;

Or:

        next if $fname =~ /\A\.\.?\z/;

Or:

        next if $fname eq '.' or $fname eq '..';


>         system("squid", "-k", "rotate"), if ($si[7]=~/[1-9]\d{6,}/ &&

Why the regular expression?  Why not just:

        system( 'squid', '-k', 'rotate' ) if $si[ 7 ] > 999_999 &&

Or just use the file test -s:

        system( 'squid', '-k', 'rotate' ) if -s "/var/log/squid/$fname" >
999_999 &&


> $fname=~/^([a-z]+\.log)$/);

You are not using the contents of $1 so why are you using capturing parentheses?


>         unlink $fname, if $fname=~m/(\S{3,}\.){2,3}/;

You are trying to unlink() a file in the current directory but the file is
actually in the /var/log/squid directory:

        unlink "/var/log/squid/$fname" if $fname =~ /(?:\S{3,}\.){2,3}/;


> }



John
-- 
Perl isn't a toolbox, but a small machine shop where you can special-order
certain sorts of tools at low cost and in short order.       -- Larry Wall

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to