I would like to run a perl script to find only the subdirectories in a directory. I would not like to have the "." and ".." returned.
The program I am trying to use looks like this:
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";
}
The output of this however, has the "." and "..". How do I exclude them from the list?
next unless $name =~ /^\.\.?+$/;
Also, the module File::Find::Rule makes a vary nice interface for this type of thing.
use File::Find::Rule;
my @dirs = File::Find::Rule->new
->directory
->in($root)
->maxdepth(1)
->not(File::Find::Rule->new->name(qr/^\.\.?$/);
If you want to collect the dirs into an array:
my @dirs = grep {-d "$root/$_" && ! /^\.{1,2}$/} readdir($dh);
If you really just want to print the dirs, you can do:
print "$_\n" foreach grep {-d "$root/$_" && ! /^\.{1,2}$/} readdir($dh);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With