Как мне архивировать файлы .log с помощью Perl в Windows XP? - PullRequest
1 голос
/ 22 апреля 2011

Как можно более простым способом, я задаюсь вопросом, знает ли кто-нибудь, как заархивировать файлы .log в каталоге Windows XP, просто назвав их текущим "localtime ()" как часть имени файла? ( Не думайте, что файл журнала заблокирован. ) Я пробовал разные способы сделать это, но не смог решить ... и в Интернете нет хороших примеров.

Вот что я ищу:

for (all files > that 1 day old)   
  rename file  to  file.[datestamp].log
end

Ответы [ 4 ]

2 голосов
/ 04 мая 2011

Ну, это выглядит так просто, я, наверное, что-то неправильно понимаю.Задача состоит в том, чтобы переместить например "yada.log" в "yada.2011-05-04.log"?Тогда как насчет этого:

use strict;
use warnings;

use File::Copy;
use POSIX qw(strftime);

my $dir = $ARGV[0] or die "Usage: $0 <directory>";
my $now_string = strftime "%Y-%m-%d_%H%M%S", localtime;

opendir DIR, $dir or die $!;
my @files = readdir DIR;

chdir $dir or die $!;
for my $file (@files) {
    next if (-d $file);
    next unless ($file =~ /^(.*)(\.log)$/i);
    my $dst = $1 . "." . $now_string . $2;
    move ($file, $dst) or die "Failed to move $file: $!";
}
0 голосов
/ 07 мая 2011

Возможно, есть некоторые модули, которые могут сделать это для вас, например, Logfile::Rotate.

0 голосов
/ 04 мая 2011

Вот как я в конечном итоге это сделал, благодаря TLP!Этот скрипт содержит ошибки в строке # 12, но он едва работает.

use strict; 
use warnings;
use File::Copy; 
use POSIX qw(strftime); 

my $dir;
my $file;

if ( @ARGV = 2 ) { 
  print "Two args accepted."; 
  $dir = $ARGV[0] or die "Usage: <directory> <filename>";
  $file = $ARGV[1] or die "Usage: <directory> <filename>";
  goto runblock; 
}
else { print "Number of arguments must be 2: directory filename\n"; goto fail; }

runblock: print "Renaming $file .\n";

chdir $dir or die $!;
my $now_string = strftime "%Y-%m-%d_%H%M%S", localtime; 
if (-e $file) {
  if (-A $file > 7 ) {
    my $dst = "siteAlive." . $now_string . ".log"; 
    move($file, $dst) or die "Failed to move $file: $!";
    goto endscript;
  }
} 

fail: print "Failed to rename $file . Try again.\n" ;
endscript: print "End of script.\n";
0 голосов
/ 04 мая 2011
opendir(FILES, '*logdir*');
my @files = readdir FILES;
closedir(FILES);
foreach(@files){
    system "move $_ $_.".localtime().".log" if -A $_ > *age*;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...