Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

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

Comment on List all directories
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
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (9)
As of 2015-11-26 13:47 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (701 votes), past polls