Perl рекурсивный поиск файлов для имен файлов Unicode - PullRequest
0 голосов
/ 16 октября 2011

Я пробовал 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 голосов
/ 18 октября 2011
0 голосов
/ 16 октября 2011

У меня нет способа проверить это (Linux, не слишком много знаний по Юникоду и т. Д.), И это, вероятно, неэффективно, но, возможно, это сработает "просто сделай это каким-то образом". Вы можете использовать мой 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 и друзей, это может быть медленным, но пока он может видеть ваши файлы, это должно работать. Попробуйте и дайте мне знать, если есть проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...