在此代碼中,我解析了一個文件(包含來自ls -lrt
的輸出)以獲取日誌文件的修改日期。然後,我將所有日誌文件移動到一個新的文件夾中,修改日期已添加到文件名中,並將所有這些文件都設置爲tar。perl while循環
我得到的問題是在while
循環中。因爲它正在讀取while循環持續運行15次的所有文件的數據。我知道代碼中存在一些問題,但我無法弄清楚。
在while循環中我分裂了ls -lrt
記錄來查找日誌文件修改日期。 $file
是我存儲在文本文件/scripts/yagya.txt
中的ls
命令的輸出,以獲取修改日期。但while
循環正在執行15次,因爲文件夾中有15個與該模式匹配的日誌文件。
#!/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");
請學習如何縮進代碼。 – Alnitak
請以某人可以理解的方式重新陳述您的問題。 –
嘗試用以下方法重新構造問題:1.)我有這個2.)我想得到這個3.)我試過(已經在這裏)。看來,你正在嘗試將shell腳本重寫爲perl,6次調用system(...),比如system(「rm $ data」)而不是'unlink $ data或警告「無法取消鏈接$ data:$!」。 ;'。你可以發佈shell腳本,如果你有嗎? – jm666