作者frank1983 (What?)
看板Perl
标题Re: [问题] 目录下的档案中比对字串
时间Sat Apr 10 03:58:49 2010
※ 引述《jammy8 (jay)》之铭言:
: 请问各位
: 假设在/tmp目录底下有/tmp/a .. z 的子目录
: 我想要在a...z子目录中寻找档案里有ERROR字样的档案
: 并且将找到的档案分别复制到/tmp/20100410的目录底下(随着日期而产生档名)
: 接着会放到crontab去做每30分钟的check
: 请问有好的方法可以推荐给我吗?
: 感恩阿
这样子写可以吗?
#!/usr/bin/perl
use warnings;
use strict;
use File::Copy;
sub get_date
{
my (undef,undef,undef,$mday,$mon,$year) = localtime(time);
return sprintf "%d%02d%02d", $year+1900, $mon+1, $mday;
}
sub has_error
{
my $file = shift;
local $/;
open my $fh, $file or return 0;
return index(<$fh>, 'ERROR') >= 0;
}
sub check
{
my $dir = shift;
my $log_dir = shift;
for my $sub_dir ('a' .. 'z')
{
chdir "$dir/$sub_dir" or next;
opendir my $dh, '.' or next;
while (defined(my $file = readdir($dh)))
{
next if $file eq '.' || $file eq '..';
if (has_error($file))
{
mkdir $log_dir if !-d $log_dir;
copy $file, "$log_dir/$file";
}
}
closedir $dh;
}
}
my $tmp = '/tmp';
my $date = get_date();
check $tmp => "$tmp/$date";
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.184.18
※ 编辑: frank1983 来自: 61.230.184.18 (04/10 04:03)