このコードでは、ファイル (からの出力を含む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");