Perl 递归文件搜索 unicode 文件名

发布于 2024-12-09 23:55:07 字数 540 浏览 1 评论 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);

I've tried File::Find::Rule, but it doesn't reveal filenames that contain characters like:
בר רפאלי

Any ideas?

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);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

掀纱窥君容 2024-12-16 23:55:07

我没有办法测试这个(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 和朋友,因此可能会很慢,但只要它可以看到您的文件,就应该可以尝试一下,如果有问题请告诉我。

I have no way to test this (Linux, not too much Unicode knowledge etc) and its probably inefficient, but perhaps it will work in a "just get it done kind of way. You could use my File::chdir::WalkDir and use a per-file callback that adds to the file name to a list:

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

Since this leans on opendir and friends it may be slow, but as long as it can see your files, this should work. Give it a try and let me know if there are problems.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文