cristy@eplrx7.uucp (John Cristy) (11/13/90)
I use the following perl program to search USENET groups for articles with
a specified pattern. Hope you find it useful:
lookup <pattern>
lookup -comp.lang.perl <pattern>
cristy@dupont.com
-----
#!/bin/perl -w
#
# Lookup recursively descends a directory and lists files that contain the
# specified patterns.
#
# Command usage:
#
# lookup [ -newsgroup ] pattern [ pattern ... ]
#
#
sub lookup
{
local($directory)=shift;
local($file);
local(@filelist);
chdir $directory || die "Can't change to directory $directory.\n";
#
# Sort list of directory and filenames.
#
opendir(DIRECTORY,$directory);
@filelist=sort(grep(!/^\.\.?$/,readdir(DIRECTORY)));
closedir(DIRECTORY);
foreach $file (@filelist)
{
if (-d $file)
{
#
# File is a directory-- descend to the next level.
#
do lookup("$directory/$file");
chdir $directory || die "Can't change to directory $directory.\n";
}
else
{
#
# Read contents of file.
#
open(FILE,$file);
@content=<FILE>;
close(FILE);
#
# Determine if file contains all the specified patterns.
#
foreach $pattern (@patterns)
{
@result=grep(/$pattern/,@content);
if ($#result < 0)
{
#
# File does not contain the pattern-- exit loop.
#
last;
}
}
if ($#result >= 0)
{
#
# File contains the pattern-- list it.
#
print "\n$directory/$file:\n";
print "\n@content\n";
print "\n---\n";
}
}
}
}
if ($#ARGV < 0)
{
print "Usage: lookup [ -newsgroup ] pattern [ pattern ... ]\n";
exit(1);
}
undef $/;
$*=1;
$directory="/usr/usenet/news";
if ($ARGV[0] =~ /^-/)
{
#
# User specified newsgroup.
#
$newsgroup=shift(@ARGV);
$newsgroup=~s/^-//; # delete '-'
$newsgroup=~s/\./\//g; # convert newsgroup to directory
$directory=$directory. "/" . $newsgroup;
}
@patterns=@ARGV;
do lookup("$directory");
--
The UUCP Mailer