0

我正在编写一个脚本,其中我有 3 级目录,如下所示:

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

文件名相同,但大小总是不同。我必须根据这些文件的大小比较LOGdir 和dir 中的内容。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 回答