使用Perl获取目录中的子目录列表(仅限顶级)

Sun*_*dar 9 perl

我想运行一个perl脚本来只查找目录中的子目录.我不想拥有"." 和".."返回.

我试图使用的程序如下所示:

use warnings;
use strict;

my $root = "mydirectoryname";

opendir my $dh, $root
  or die "$0: opendir: $!";

while (defined(my $name = readdir $dh)) {
  next unless -d "$root/$name";
  print "$name\n";
}
Run Code Online (Sandbox Code Playgroud)

然而,这个输出有"." 和"......".如何从列表中排除它们?

Sam*_*kri 12

如果要将dirs收集到数组中:

my @dirs = grep {-d "$root/$_" && ! /^\.{1,2}$/} readdir($dh);
Run Code Online (Sandbox Code Playgroud)

如果你真的只想打印dirs,你可以这样做:

print "$_\n" foreach grep {-d "$root/$_" && ! /^\.{1,2}$/} readdir($dh);
Run Code Online (Sandbox Code Playgroud)


小智 8

next unless $name =~ /^\.\.?+$/;
Run Code Online (Sandbox Code Playgroud)

此外,模块File :: Find :: Rule为这类事物提供了一个很好的界面.

use File::Find::Rule;

my @dirs = File::Find::Rule->new
    ->directory
    ->in($root)
    ->maxdepth(1)
    ->not(File::Find::Rule->new->name(qr/^\.\.?$/);
Run Code Online (Sandbox Code Playgroud)


ewh*_*ewh 4

只需修改您的检查即可查看 $name 何时等于 '.' 或“..”并跳过该条目。