无法获取文件的完整路径

时间:2014-02-22 09:10:30

标签: perl

我写了一个脚本,它将执行:

  1. 递归搜索文件
  2. 获取唯一(所需的)文件
  3. 在远程放置的服务器上创建目录
  4. 将此文件复制到相应目录中
  5. 操作系统: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: $!";
    
    }
    

1 个答案:

答案 0 :(得分:4)

wanted子广告中,您可以访问当前正在查看的文件的完整路径$File::Find::name。请参阅the docs of File::Find

这意味着你并不需要在你的发现之下拥有所有这些东西。您可以在wanted函数中完成所有操作。


另请注意,您可以使用List::MoreUtils中的uniq替换foreach%seen解决方案。