Perl readdir按顺序

标签 perl sorting directory readdir

有什么方法可以保证readdir返回的列表中的订单吗?

我有代码:

opendir(my $DIR, $src) or die "Error opening $src";

# Loop for each file in the directory
while (my $file = readdir($DIR))
{
        print "$file\n";
    }

但是它以随机顺序返回。现在,我知道可以通过Google进行快速搜索找到许多解决方案,但是我找不到所需的确切顺序。
基本上,我希望文件夹显示为FIRST或LAST,而不是在文件之间。

例如,现在如果我具有文件夹结构:
folder
folder
file1
file2
file3

我得到结果:
file2
folder
folder
file1
file3

当我真正想要的时候:
folder
folder
file1
file2
file3

或者:
file1
file2
file3
folder
folder

有什么办法可以做到这一点?

最佳答案

您可以先放置文件夹,然后再按文件/目录名称进行排序,

# $src pointing to folder open with opendir
my @sorted_dir = 
  map $_->[0],
  sort {
    $a->[1] <=> $b->[1]
      ||
    $a->[0] cmp $b->[0]
  }
  map [ $_, -f "$src/$_" ],
  readdir($DIR);

虽然可以达到类似的效果,
for my $file (sort { -f "$src/$a" <=> -f "$src/$b" } readdir($DIR)) {
  print "$file\n";
}

它较慢且效率低下,因为它更多地用于文件系统检查目录条目是否为纯文件。

关于Perl readdir按顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16793043/

相关文章:

python - Pandas 的自然排序

java - Java 系统调用中的 Perl 字符串

perl - 如何调试 Perl 项目

windows - 如何在 Windows 上同时使用 ActiveState 和 Strawberry perl

JavaBeans - 按字母顺序排序

ios - 通过指针解析排序查询

Perl:一行中有多个 = 符号(列表和标量上下文混淆)

Bash遍历目录中的文件输出不存在的文件

android - 我可以以编程方式选择 Android 布局文件夹吗?

ruby - 如何使用 Ruby 在目录中找到最近修改的文件夹?