0

以下のような3レベルのディレクトリがあるスクリプトを書いています:

LOG
├── a.txt
├── b.txt
└── sdlog
    ├── 1log
    │   ├── a.txt
    │   └── b.txt
    └── 2log
        ├── a.txt
        └── b.txt

ファイルの名前は同じですが、サイズは常に異なります。これらのファイルのサイズに基づいて、LOGディレクトリとディレクトリにあるものを比較する必要があります。1logにあるファイルは、2log何もするつもりはありません。

ファイル名を出力するスクリプトを作成しましたが、上記のタスクは実行できません。

#!/usr/bin/perl 
use strict;
use warnings;
use File::Find;
use File::Basename;
my $new_file_name;
my $start_directory = "C:\\logs";


find({ wanted => \&renamefile }, $start_directory);
sub renamefile 
{
  if ( -f and /\.txt$/ )
   {
     my $file = $_;
     open (my $rd_fh, "<", $file);
     LINE: while (<$rd_fh>) 
     {
      if (/<(\d)>/i)
      {
       close $rd_fh;
       print"$file\n";
       #print" Kernal-> $file\n";
       last LINE;
       }
    if (/I\/am_create_activity/i)
    {
     close $rd_fh;
     print"$file\n";
       #print" EVENT-> $file\n";
     last LINE;
     }
  } 
}
}    
4

1 に答える 1

3

-sファイルサイズを取得するために使用します。サブディレクトリを再帰的に検索するわけではないので、必要ありませんFile::Find

#!/usr/bin/perl
use warnings;
use strict;

use File::Basename;

my $path1 = 'LOG';
my $path2 = 'LOG/sdlog/1log';

for my $file (glob "$path1/*.txt") {
    my $name = basename($file);

    if (-f "$path2/$name") {

        if (-s $file > -s "$path2/$name") {
            print $file, "\n";

        } else {
            print "$path2/$name\n";
        }

    } else {
        warn "File $path2/$name not found.\n";
    }
}
于 2013-08-01T10:41:27.387 に答える