我写了一个脚本,它将执行:
操作系统:Windows7
我陷入了4个步骤(将这些文件复制到相应的目录中),因为我无法获取要复制的文件的完整路径。
错误:在New_UIbug_parser.pl第70行打印时使用未初始化的值$ full_path
我想补充的另一件事是将文件放在不同的目录中。
这是我的porg:
use strict;
use warnings;
use File::Find;
use File::Path qw(make_path);
use File::Copy;
my $path = $ARGV[0];
my @UniqueAnr = ();
my %seen = ();
my $foundAnr;
find({ wanted => \&GetappropriateFile }, $path);
my @all_file;
my $file_name;
sub GetappropriateFile
{
my $file = $_;
if (-f $file && $file =~ /traces[_d+]/)
{
#my $line;
$file_name = $File::Find::name;
open(my $fh, "<", $file) or die "cannot open file:$!\n";
my @all_lines =<$fh>;
my $i=0;
foreach my $check (@all_lines){
if( $i < 10){
if($check =~ /Cmd line\:\s+com\.android\..*/){
#print"$file_name\n";
push(@all_file,$file);
#push(@all_file,$file_name);
}
$i++;
}
else{
last;
}
#print "$file\n";
close($fh);
}
}
}
foreach my $all_anr_file (@all_file)
{
unless ($seen{$all_anr_file})
{
# if we get here, we have not seen it before
push(@UniqueAnr, $all_anr_file);
$seen{$all_anr_file}++;
}
}
for my $anr_file (@UniqueAnr)
{
chomp($anr_file);
print "$anr_file\n";
my $full_path = <$path.*/$anr_file>;
print $full_path;
(my $dir = $anr_file) =~ s/\.[^.]+$//;
my $new_dir = File::Spec->catdir('\\\\star\Source_Temp\test', $dir);
#print"$new_dir\n";
#make_path($new_dir);
copy($full_path, $new_dir) or die "Copy failed for file $anr_file: $!";
}
答案 0 :(得分:4)
在wanted
子广告中,您可以访问当前正在查看的文件的完整路径$File::Find::name
。请参阅the docs of File::Find。
这意味着你并不需要在你的发现之下拥有所有这些东西。您可以在wanted
函数中完成所有操作。
另请注意,您可以使用List::MoreUtils中的uniq
替换foreach
和%seen
解决方案。