in reply to Finding directories at a variable depth

Here is a File::Find script which counts slashes to determine depth. Modify the depth and slash according to your needs.
#!/usr/bin/perl # linux only, use appropriate \ for MSWindows use warnings; use strict; use File::Find; use File::Spec; if (@ARGV < 2){print "Usage: $0 dir depth\n";exit} my ($path, $depth)= @ARGV; my $abs_path = File::Spec->rel2abs($path); #in case you enter . for di +r my $m = ($abs_path) =~ tr!/!!; #count slashes in top path find (\&found,$abs_path); exit; sub found{ my $n = ($File::Find::name) =~ tr!/!!; #count slashes in file return $File::Find::prune = 1 if $n > ($m + $depth); return unless -d; # do stuff here. #print "$_\n"; #name only print "$File::Find::name\n"; #name with full path }

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh

Replies are listed 'Best First'.
Re^2: Finding directories at a variable depth
by uday_sagar (Scribe) on Aug 02, 2012 at 09:31 UTC

    This is just what I wanted zentara!

    Thanks.

      And if i wanted only directories of level 2 and not of level 1?

        This is only briefly tested. The problem with only getting level 2 and not 1, is that you can't prune level 1, without pruning level 2. This script is only briefly tested, play with it. Instead of prune, use a simple return.
        #!/usr/bin/perl # linux only use warnings; use strict; use File::Find; use File::Spec; my ($path, $depth)= ('.', 2); my $abs_path = File::Spec->rel2abs($path); #in case you enter . for di +r my $m = ($abs_path) =~ tr!/!!; #count slashes in top path find (\&found,$abs_path); exit; sub found{ my $n = ($File::Find::name) =~ tr!/!!; #count slashes in file print "$m $depth $n "; return unless $n == ($m + $depth ); # do stuff here. #print "$_\n"; #name only print "$File::Find::name\n"; #name with full path }

        I'm not really a human, but I play one on earth.
        Old Perl Programmer Haiku ................... flash japh