| Description: | Hi, ever wanted to use File::Find but didn't need to recurse all the way down into sub directories? This snippet demonstrates how to limit the recursion depth. |
#!/usr/bin/perl
# linux only or change slash type
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); # if . for dir
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);
# do stuff here.
#print "$_\n"; #name only
print "$File::Find::name\n"; #name with full path
}
|
|
| comment on File::Find limited recursion Download Code | |
|---|---|
| Re: File::Find limited recursion by belg4mit on Oct 18, 2002 at 16:17 UTC | |
Unlike just splitting the directories on the separator, empty directory names ("''") can be returned, because these are significant on some OSs (e.g. MacOS).And since something like // would only occur if it were fed to File::find, counting the number of elements in the list should be fine.
-- | [reply] |
| Re: File::Find limited recursion by princepawn on Oct 18, 2002 at 16:48 UTC | |
| [reply] d/l code |
by merlyn on Oct 18, 2002 at 16:54 UTC | |
There is a prune option to File::Find that should do what you want.That's precisely what is being used. -- Randal L. Schwartz, Perl hacker
| [reply] |
| Re: File::Find limited recursion by Aristotle on Oct 18, 2002 at 17:46 UTC | |
Makeshifts last the longest. | [reply] |
| Re: File::Find limited recursion by runrig on Oct 18, 2002 at 19:39 UTC | |
| [reply] |