我正在编写一个脚本,其中我有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;
}
}
}
}
答案 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";
}
}