find/rule for everything
#### if the number of dirs you expect fits in memory
#!/usr/bin/perl -- use strict; use warnings; use Path::Tiny qw/ path cwd /; use File::Find::Rule qw/ find rule /; use autodie qw/ chdir /; my $cwd = cwd(); ## all dirs #~ my @dirs = find( directory => in => 'antarctica' ); ## only depth 1 my @dirs = find( directory => maxdepth => 1 , in => 'antarctica' ); for my $dir( @dirs ){ Voltronize( $dir ); } chdir $cwd;
#### if the number of dirs you expect is huge
#!/usr/bin/perl -- use strict; use warnings; use Path::Tiny qw/ path cwd /; use File::Find::Rule qw/ find rule /; use autodie qw/ chdir /; my $cwd = cwd(); ## iterator my $dirs = rule( directory => maxdepth => 1 )->start( 'antarctica' ); while( defined( my $dir = $dirs->match ) ){ Voltronize( $dir ); } chdir $cwd;
Or readdir/glob with Path::Tiny (easier than actual readdir , more memorable than glob )
#!/usr/bin/perl -- use strict; use warnings; use Path::Tiny qw/ path cwd /; use autodie qw/ chdir /; my $cwd = cwd(); my @dirs = grep { -d $_ } path( 'antarctica' )->children(); for my $dir( @dirs ){ Voltronize( $dir ); } chdir $cwd;
The Path::Tiny iterator is no find/rule but still beats readdir/glob
#!/usr/bin/perl -- use strict; use warnings; use Path::Tiny qw/ path cwd /; use autodie qw/ chdir /; my $cwd = cwd(); my $dirs = path( 'antarctica' )->iterator( { recurse => 0, follow_symlinks => 0, } ); while( defined( my $path = $dirs->() ) ){ Voltronize( $path ) if $path->is_dir; } chdir $cwd;
In reply to Re: Execute a for loop in many subdirectories (find/rule)
by Anonymous Monk
in thread Execute a for loop in many subdirectories
by marlowvoltron
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |