gpt4 book ai didi

perl - 如何在 Perl 中找到文件的大小写保留名称?

转载 作者:行者123 更新时间:2023-12-04 11:04:57 29 4
gpt4 key购买 nike

在不区分大小写的文件系统(例如 NTFS 或 HFS+)上,给定文件名,确定文件名的大小写保留版本的最有效方法是什么?

考虑 HFS+ (Mac OS X):

> perl -E 'say "yes" if -e "/TMP"'
yes

当然,它说它存在,但我不知道它是如何保存的。确定实际案例的最有效方法是什么?

到目前为止我尝试过的:
  • glob带有字符类:它在 Windows 上不起作用:
    > perl -E "say for glob "C:\\Perl"
    C:\Perl
    > perl -E "say for glob "C:\\[Pp][Ee][Rr][Ll]"

    请注意缺少最后一个命令的输出。 :-(
  • opendir/readdir :有效,但读取整个目录似乎效率很低:
      > perl -E "opendir my $dh, 'C:\\'; say for grep { lc $_ eq 'perl' } readdir $dh; close $dh"
    Perl

  • 认为应该有一些核心操作系统指令或其他东西来更有效地获取这些信息是不是很疯狂?

    最佳答案

    opendir/readdir/grep解决方案是正确的。 Via Twitter , Neil Bowers 指出了来自 perlport 的引文:

    Don't count on filename globbing. Use opendir, readdir, and closedir instead.



    @miyagawa , 还有 via Twitter , 表示没有系统调用,如果有,它就不会是可移植的。

    鉴于 @mob's answer和评论 from David Golden建议 glob会比 opendir贵, readdir无论如何,似乎别无他法。

    所以这是我编写的函数,用于在目录中查找给定基本名称的所有情况:
    sub _actual_filenames {
    my $dir = shift;
    my $fn = lc shift;
    opendir my $dh, $dir or return;
    return map { File::Spec->catdir($dir, $_) }
    grep { lc $_ eq $fn } readdir $dh;
    }

    关于perl - 如何在 Perl 中找到文件的大小写保留名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28613169/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com