如何根据perl中的文件大小来区分文件

时间:2013-08-01 10:12:15

标签: perl

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

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

文件名相同但大小始终是差异。我必须根据大小来比较LOG 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;
     }
  } 
}
}    

1 个答案:

答案 0 :(得分: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";
    }
}