2011-10-16 2 views
0

나는 File::Find::Rule을 시도했지만,이 같은 문자가 포함 된 파일 이름을 공개하지 않습니다 בר רפאלי펄 재귀 파일 검색은

어떤 아이디어?

use File::Find::Rule; 
use Win32::Shortcut; 
use Spreadsheet::WriteExcel; 

my $workbook = Spreadsheet::WriteExcel->new('status.xls'); 

my $worksheet = $workbook->add_worksheet(); 


my $base_dir ='E:/files/'; 

my $find_rule = File::Find::Rule->new; 

#$find_rule->maxdepth(1); 

$find_rule->name('*.lnk'); 

my @files = $find_rule->in($base_dir); 

print scalar(@files)."\n"; 

#print join("\n", @files); 
+0

로캘의 인코딩에 따라 인코딩됩니다. Windows에서는 로켈별로 인코딩 할 수없는 파일 이름이있을 수 있습니다. 나는 그 파일의 짧은 이름을 반환함으로써 처리되는 내기 ??? – ikegami

+0

파일을 건너 뛰어도 전혀 표시되지 않습니다. – Nick

+2

검색 코드를 보여주세요! –

답변

0

나는이 (리눅스, 너무 많은 유니 코드 지식 등) 및 아마 비효율적를 테스트하는 방법이 없습니다, 그러나 아마 그것은 "단지 그것의 방법 종류 끝낼에서 작동합니다. 당신은 내 File::chdir::WalkDir을 사용할 수 있습니다 이가 느려질 수 있습니다 opendir 친구에 기댈 때문에

#!/usr/bin/env perl 

use strict; 
use warnings; 

use File::chdir::WalkDir; 
use File::Spec::Functions 'catfile'; 

my $base_dir = '.'; 

my @files; 
my $callback = sub { 
    my ($file, $dir) = @_; 
    return unless ($file =~ /\.lnk$/); 

    push @files, catfile($dir, $file); 
}; 

walkdir($base_dir, $callback); 

을하지만, 한이 파일을 볼 수 있듯이,이 일을해야하고, 목록에 파일 이름에 추가하는 파일 당 콜백을 사용합니다. 시도해보고 문제가 있으면 알려주세요.