Perl递归文件搜索unicode文件名

时间:2011-10-16 08:08:15

标签: perl file search unicode recursion

我尝试了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);

2 个答案:

答案 0 :(得分: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和朋友,因此它可能会很慢,但只要它可以看到您的文件,这应该可行。尝试一下,如果有问题请告诉我。

答案 1 :(得分:0)