Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

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
Re: List all directories
by menolly (Hermit) on Sep 25, 2003 at 18:48 UTC
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"})'

    -enlil

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.
    HTH

    _________
    broquaint

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?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://294213]
Approved by Corion
help
Chatterbox?
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: (11)
As of 2014-09-30 13:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (371 votes), past polls