2011-10-16 62 views
0

我试过File::Find::Rule,但没有发现任何包含类似字符的文件名: בר רפאלי为Unicode文件名的Perl递归文件搜索

任何想法?

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

我没有办法进行测试(Linux的,没有太多的Unicode知识等),它可能是低效的,但也许它会在“只把它实物进行的方式工作。你可以用我的File::chdir::WalkDir并使用每个文件的回调,增加了文件名列表:

#!/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); 

由于这斜靠在opendir和朋友也可能是缓慢的,但只要能看到你的文件,这应该工作。试一试,让我知道是否有问题。