2010-12-21 97 views
1

我使用Perl的模塊File :: Find遍歷目錄。 該目錄是具有目錄.snapshot的NFS共享。 在此文件夾中有昨天文件結構的快照,因此它在結果中具有相同名稱的目錄。 因此,我得到以下錯誤:
Perl文件::查找重複名稱

[folder_in_which_find_is_executed].snapshot/sv_daily.0 encountered a second time at /usr/lib/perl5/5.8.8/File/Find.pm line 566. 

是否有辦法防止這種情況發生例如通過刪除重複的條目?

這是代碼子執行查找:

sub process() 
{ 
     my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, 
      $atime, $mtime, $ctime, $blksize, $blocks) = stat $_; 
     my $type = (-f _ ? 'f' : (-d _ ? 'd' : '*')); 
     my ($md5sum); 

     if (!defined $dev) 
     { 
       if (-l $_) 
       { 
         die "Broken symbolic link: $File::Find::name"; 
       } else { 
         die "Error processing $type '$File::Find::name'"; 
       } 
     } 

     my $name = $File::Find::name; 
     $name =~ s|^\.\/?||; 

     if ($name ne '') 
     { 
       $db->{$name} = { 
         name => $name, 
         mode => sprintf("%04o", $mode & 07777), 
         user_id => $uid, 
         group_id => $gid, 
         last_modified => $mtime, 
         type => $type 
       }; 

       if ($type eq 'f') 
       { 
         $db->{$name}->{size} = $size; 
         $db->{$name}->{inode} = $ino; 
         $md5sum = SumForEntry($name, $_); 
         $db->{$name}->{md5sum} = $md5sum; 
       } 
     } 
} 

以下行執行這個子:

find({ wanted => \&process, follow => 1}, '.'); 

有人可以幫我嗎?

+0

庫存問題:爲什麼使用空的原型? – Hugmeir 2010-12-21 15:08:55

+0

@Hugmeir:爲什麼不呢? File :: Find手冊中說_The想要的函數不需要參數,而是通過一系列變量來完成它的工作。@ – 2010-12-21 16:18:39

回答

1

的「想」功能可以告訴File::Find修剪其搜索:

The function may set $File::Find::prune to prune the tree unless bydepth was specified.

在進入快照目錄,設置剪枝變量,以防止它進一步的處理。