#!/usr/bin/perl sub get_sub_dirs { my $dir = shift; opendir my $dh, $dir or die "Error: $!"; my @files = grep !/^\.\.?$/, readdir $dh; closedir $dh; for my $file ( @files ) { print "$dir/$file\n"; get_sub_dirs( "$dir/$file" ) if -d "$dir/$file"; } } $topdir= shift || '.'; get_sub_dirs($topdir); exit;
or
#!/usr/bin/perl use strict; use warnings; my $level = 0; processDir("."); ### # Possibly add a callback so that it doesn't only print # directories but can do other stuff too. ### sub processDir { my ($curDir) = @_; my $dirHandle = undef; opendir($dirHandle, "$curDir"); ### # Didn't feel like playing w/ regexps for a quick solution ### my @contents = sort grep { $_ ne "." and $_ ne ".." } readdir($dirH +andle); closedir($dirHandle); foreach my $file (@contents) { print "\t" x $level; print "$file"; if( -d "$curDir/$file" ) { print "/\n"; ### # Dont' follow symlinks... they cause loops ### if( ! ( -l "$curDir/$file" ) ) { ### # I should pass the level along or make it all # iterative. But you get the idea ### $level++; processDir( "$curDir/$file" ); $level--; } } else { print "\n"; } } }
In reply to Re: Recursive directory listing
by zentara
in thread Recursive directory listing
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |