Loan Tran wrote:
>
> This is how i use the unlink. Please take a look.
> Thanks.
> -----------
>
> #!/usr/bin/perl
You should enable warnings and strictures.
#!/usr/bin/perl -w
use strict;
> # clean old file
>
> use Carp;
>
> $cur_time = time; # current time in epoch (in
> seconds)
> $dir = '/opt/sybase/OCT/dump/';
> $hour = 10 ;
>
> opendir DIR, $dir || die "Failed to open $dir: $!";
This won't die because of the precedence of ||. It is interpreted as:
opendir DIR, ( $dir || die "Failed to open $dir: $!" );
Use either:
opendir DIR, $dir or die "Failed to open $dir: $!";
Or:
opendir( DIR, $dir ) || die "Failed to open $dir: $!";
> my @files = readdir DIR;
> closedir DIR;
> unless ($cnt = @files) {
> print "No file to rm.\n";
> return;
return() does nothing here, it is for returning from subroutines.
Perhaps you meant exit().
> }
>
> foreach $file (@files) {
> next if $file =~ /\./;
This was pointed out in another post.
next if $file =~ /^\.\.?$/;
> ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev,
> $size, $atime, $mtime, $ctime, $blksize, $blocks) =
> stat $file;
^^^^^^^^^^
stat "$dir$file";
But since you are only using $mtime then this would be simpler:
my $mtime = (stat "$dir$file")[9];
Or better yet, since you only want the age in hours:
my $fage = -M "$dir$file";
> $fage = ($cur_time - $mtime) / 3600; # file in
> hours (note: 1 hr = 3600 sec)
>
> print "file found: $file ($fage hr)\n";
>
> if ($fage > $hour) {
> printf "\nDelete file older than $hour
> hrs : %4s %.2f hrs old\n", "$dir"."$file",$fage;
> $rc = unlink "$dir"."$file" ;
> $stat = $rc ? "success" : "failed";
> print "\t$file remove status:
> $stat.\n";
> }
> else {
> printf "Too young: %15s [%.2f hr]\n",
> $file, $fage;
> }
> }
> opendir DIR, $dir || die "Failed to open $dir:
> $!";
Same precence problem as with previous opendir.
> my @files = readdir DIR;
> $cnt2 = @files;
>
> print "\nTo remove all files that are older
> than $hour in directory: $dir\n";
> printf "Before delete: %5d\n", $cnt;
> printf "Files deleted: %5d\n", $cnt - $cnt2;
> printf "After delete : %5d\n", $cnt2;
> closedir DIR;
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]