Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

List all directories

by Anonymous Monk
on Sep 25, 2003 at 18:32 UTC ( #294213=perlquestion: print w/replies, xml ) Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hello Monks , Is there an easy way to list all directories and sub directories in a user home. thanks

Replies are listed 'Best First'.
Re: List all directories
by Enlil (Parson) on Sep 25, 2003 at 18:48 UTC
    perl -MFile::Find -wle 'find(sub{print $File::Find::name if -d'},"/hom +e/user"})'


Re: List all directories
by broquaint (Abbot) on Sep 25, 2003 at 19:16 UTC
    Using the search-tastic File::Find::Rule we can do this quite simply
    use File::Find::Rule; print "$_\n" for find(directory => in => $ENV{HOME});
    See. the File::Find::Rule docs for more info.


Re: List all directories
by menolly (Hermit) on Sep 25, 2003 at 18:48 UTC
Re: List all directories
by mandog (Curate) on Sep 25, 2003 at 19:25 UTC

    A lot depends on your needs. If this was a throw away script, You could do something ugly like:

    system('ls -Rl ~| grep ^d');

    You could look at File::Find and the -d function

    If you couldn't figure out File::Find, you could do something like this:

    my $DIE_MSG="FATAL ERROR"; sub get_bytes_in_file_list { my @files = @_; my $size=0; foreach my $file (@files) { die "can't read $file $DIE_MSG" if ( !-r $file ); if ( -d $file ) { opendir( DH, $file ) or die "$! bad open directory $file $DIE_MSG\n"; my @sub_files = map { "$file/$_"; } grep { $_ ne '.' && $_ ne '..'; } readdir(DH); closedir(DH) or die "$! couldn't close dir:$file\n$DIE_MSG +"; $size += get_bytes_in_file_list(@sub_files) if (@sub_files) # don't check empty dir; } else { $size += ( stat($file) )[7]; } } return $size; }

    email: mandog
      I like the way you are doing it, but this just to show the binary size , how would I make it list the directories name like /bla/ba2/ba23 thanks for your help

        Is this homework?

        A couple other monks have provided much slicker, one line solutions that you can copy 'n paste...

        To answer your specific quesion, you can add print statements to various places in the sub...and perhaps remove bits of code that aren't relivant to your purposes

        email: mandog

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://294213]
Approved by Corion
[LanX]: so it was the will of the people to take back control
[LanX]: ;)
[marto]: and you still can't get a decent cup of tea in that town
[davies]: The turnout, IIRC, was about 12%.
[< & >]: 12% seriously? =)

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (10)
As of 2017-12-15 19:09 GMT
Find Nodes?
    Voting Booth?
    What programming language do you hate the most?

    Results (442 votes). Check out past polls.