Bryan R Harris wrote:

> I have a large directory tree that I'd like to build index files for,
> essentially an
>
>      ls > index.txt
>
> in each directory in the tree.  Obviously I'm having trouble figuring it
> out.  =)
>
> I've tried the following:
>
> use File::Find;
> sub process_file {
> if (-d) {
>   $tmp = `ls $_`;
>   open(OFILE, "> index.txt") || die ("Couldn't open index.txt: $!\n");

You are opening the file in write mode always, this will clobber the
contents.
Finally you will end up with just entry that was written

>
>   print OFILE $tmp;
>   close(OFILE);
>   }
> }
> find(\&process_file, @ARGV);
> print "\n";
>
> But it misses the deepest level of directories.  Is there an established
> way of doing this kind of thing?

$File::Find::dir contains the current directory being processed and $_ the
current file
This should work for you
#!/usr/local/bin/perl -w
use strict;
use File::Find;

find (\&process_file, @ARGV);
sub process_file {
    open (INDEXFILE, ">> $File::Find::dir/index.txt") or
        die "Cannot open $File::Find::dir/index.txt : $!\n";
    print INDEXFILE;
    close (INDEXFILE);
}

But this seems like a lot of opens considering that you have huge directory
tree
You can build a hash of arrays with the directory name as the key and a
array
of filenames. After you are finished processing dump them individually into

their respective files.




-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to