http://www.perlmonks.org?node_id=294213

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"})'

    -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 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
    A reply falls below the community's threshold of quality. You may see it by logging in.