0

我正在尝试创建一个 PERL 脚本来删除旧的日志文件。我希望脚本能够做的关键事情之一是允许我传递目录、文件名(例如 test.log-*)和文件年龄的参数。

自从我使用 PERL 以来已经有一段时间了,而且我也不是那么好,所以我会很感激一些帮助。我对 getopt::long 模块也不是很熟悉。到目前为止,这是我的想法,虽然我确定它不正确,但请给我任何可能有帮助的反馈。

我想按照“script.pl --dir /release/logs --type test.log-* --days 7”的行运行脚本

#!/usr/perl

use strict;
use warnings;
use Data::Dumper;
use Getopt::Long;

my $file;
my ($dir,$type,$days);
GetOptions( 'dir'   => \$dir,
            'type'  => \$type,
            'days'  => \$days);

foreach my $file (<$dir/$type>){
   if (-M $file < $days) {
       print "\n Deleting log more than '$days' old:".$file;
       unlink $file;
       # or die "\n Failed to remove $file";
   }
}

exit;
4

1 回答 1

2

如果您坚持使用 Perl,请查看File::Find& 朋友。尽管如果您使用的是 *nix 设备,您可能应该了解find(1)这种常见的任务。

尝试:find /release/logs -name test.log-\* -mtime +7 -delete

如果您想第一次对其进行测试,请不要使用该-delete标志,它只会打印一份本应删除的文件列表。

于 2013-07-31T19:53:20.997 回答