I want to get a daily list of all the directories under a kind of
large (by home standards) news heirarchy.
I know a little about using File::Find but wonder if there is a better
way.
Here are the things one runs into with File::Find.
if you run it looking for type d (-d) directories it still takes a
really long time, and then returns all the stub names that don't
actually end in files too.
like comp/os or the like.
I can think of a few ways to get down to the uniq directories that
actually have files at there end like:
comp/os/linux/misc
But not without actually finding the numbered files in there.
For example, If I set File::Find looking for /^\d+$/ then in my case
that will have to be a full path to postings. The trouble there is
that there are literally millions of numbered files under those paths.
I was trying to think of something crazy like putting File::Find in a
while loop that lasts out soon as a numbered file is found.
Then some way to force a chngdir but not to that same path.
Can someone help me with this... but understand this is not really
urgent since I do know how to get it done the long way. Though I'm
sure this a pretty sorry way of doing it. I used Cwd because I
couldn't quite figure out how to use File::Find's nochgdir operator.
Also probably a pretty holey way of getting those duplicate paths down
to one by cramming them into a hash as keys and letting them cancel.
#! /usr/bin/perl -w
use File::Find;
use Cwd;
if(!$ARGV[0] || $ARGV[0] eq "help"){
usage();
exit;
}else{
@top_dir = @ARGV;
@ARGV = ();
}
$file = "./uniq_dir_under_news";
my ($our_dir, $absolute, $uniq_dirs, %uniq_dirs);
find(\&wanted, @top_dir);
open(FILE,">$file") or die "Can't open $file: $!";
sub wanted {
$our_dir = getcwd;
if($_ =~ /^\d+/){
## This print is just to let me know its running
print "$our_dir/$_\n";
$uniq_dirs{$our_dir} = $_;
}
}
foreach $key (keys %uniq_dirs){
push @uniq_dirs,$key;
}
for(sort @uniq_dirs){
print FILE "$_\n";
print "$_\n";
}
close(FILE);
As you may guess this takes quite a while with 6.3 GIGs under
/news.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>