在此代码中,我解析一个文件(包含来自 的输出ls -lrt
)以获取日志文件的修改日期。然后我将所有日志文件移动到一个新文件夹中,并将它们的修改日期添加到文件名中,然后对所有这些文件进行 tar。
我遇到的问题是在while
循环中。因为它正在读取所有文件的数据,所以 while 循环会继续运行 15 次。我知道代码中存在一些问题,但我无法弄清楚。
在 while 循环中,我正在拆分ls -lrt
记录以查找日志文件的修改日期。是我存储在文本文件中以获取修改日期$file
的命令的输出。但是循环执行了 15 次,因为文件夹中有 15 个与模式匹配的日志文件。ls
/scripts/yagya.txt
while
#!/usr/bin/perl
use File::Find;
use strict;
my @field;
my $filenew;
my $date;
my $file = `ls -lrt /scripts/*log*`;
my $directory="/scripts/*.log";
my $current = localtime;
my $current_time = $current;
$current_time = s/\s+//g;
my $freetime = $current_time;
my $daytime = substr($current_time,0,8);
my $seconddir = "/$freetime/";
system ("mkdir $seconddir");
open (MYFILE,">/scripts/yagya.txt");
print MYFILE "$file";
close (MYFILE);
my $data = "/scripts/yagya.txt";
my $datas = "/scripts/";
my %options = (
wanted => \&wanted,
untaint => 1
);
find (\%options, $datas);
sub wanted {
if (/[._]log\d*$/){
my $files;
my @fields;
my $fields;
chomp;
$files=$_;
open (MYFILE,$data);
while(<MYFILE>){
chop;
s/#.*//;
next unless /\S/;
@fields = (split)[5,6,7];
$fields = join('',@fields), "\n";
}
close (MYFILE);
system ("mv $files $seconddir$fields$files");
}
}
system ("tar cvf /$daytime/$daytime.tar.gz /$daytime/*log*");
system ("rm $seconddir*log*");
system ("rm $data");