On 10/7/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> Good Afternoon
>
> I am attempting to develop a script that will parse a directory listing and 
> return only directory names that match a given expression.
>
> It would make sense to me to use File::Find to do this but based on the dir 
> structure I am parsing, the amount of overhead to do this is enourmous !
>
> Basically, I have a file structure similar to:
>
> Dir1\Dir2\Support\119404\dirx\diry
> Dir1\Dir3\Support\119893\dirx
> Dir1\Dir4\Support\188884\dirx\diry\dirz
> .....
> Dir1\Dir1000\Support\100858
>
> I am simply interested in finding the directories directley under the Support 
> dir (ex.119404 from the 1st example) . There is no consistancy to the naming 
> convention other then Dir1 and Support. Dir2 can be many different values.
>
> I tried functionality similar to the following that did work on a much 
> smaller test bed:
>
> my $dirs="I:\\ID_000000_000999";
> find sub { push @dirs, $File::Find::dir if $File::Find::dir =~ 
> m/.+[Ss]upport\/\d+$/;}, $dirs;

This is not only processing directories, but any files present as
well. It will probably be a considerable (although untested) speedup
to do something like:

  my $dir="I:\\ID_000000_000999";
  our @dirs;
  sub callback {
    push @dirs, $_ if /.+[Ss]upport\/\d+$/;
  }
  sub filter {
    # we only care about directories
    return grep(-d $_, @_);
  }
  find {
    wanted=>\&callback,
    preprocess=>\&filter,
    no_chdir=>1
  }, $dir;
  print @dirs;

Read up on File::Find, and consider putting some prints in your
callbacks to see what's getting called and exactly what it's doing.

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to