in reply to How do you exclude certain folder or directories from a search

If you want to exclude a directory tree from a File::Find search, the best way is to prune the search space. This way you don't have to needlessly grovel through the directories and say "Should I do something here? Nope." The first time you encounter the directory you want to tell File::Find to short-circuit the search and go onto the next object in the filesystem. The following snippet should give you an idea about how to go about it:

#! /usr/bin/perl -w use strict; use File::Find; my $ignore = 'winnt'; find( sub { if( -d $_ and m{$ignore$}o ) { $File::Find::prune = 1; return; } print "$File::Find::name\n" if -f _; }, shift || '.' );

Tailor to suit your circumstances. You may have to worry about case-sensitivity of filenames (or not). You may also want to perform an exact match with eq instead of performing a regex match. You may want to exclude more than one directory.


print@_{sort keys %_},$/if%_=split//,'= & *a?b:e\f/h^h!j+n,o@o;r$s-t%t#u'
  • Comment on Re: How do you exclude certain folder or directories from a search
  • Download Code

Replies are listed 'Best First'.
Re: Re: How do you exclude certain folder or directories from a search
by gnu@perl (Pilgrim) on Sep 04, 2002 at 14:30 UTC
    Just wanted to add my 1.3 cents. I agree, -prune should be the most effiecient method of skipping a directory.