dww@stl.stc.co.uk (David Wright) (07/16/88)
A couple of people have posted questions about how to put 'junk' articles back
into their real groups, and two more have described methods. Here, I use
the shell script mvjunk to do it; it was received from the net in 1985
and seems to run fine with news 2.11. It 'knows' the structure of the active
file, so you'll have to change it if your news system has a diferent file
structure from 2.11.
Here it is:
----
#! /bin/sh
# @(#)mvjunk.sh (TRW Advanced Technology Facility) STA 2-Jun-1985
#
# Modified 10/22/85-James M. Scardelis, SA, Warner Computer Systems
# to create newsgroups locally only.
#
# Move news files out of junk and into their proper directories,
# updating the active list and localgroups as we go. Unknown newsgroups
# are created LOCALLY and the article installed.
#
# Be CAREFULL with that active list! Although we try to write out
# buffers as quickly as possible, conflicts can occur if someone else
# tries to use it at the same time this script is running!
#
# Strange occurences are dribbled into mvjunk-log.
#
# TRW DSG EDS SISD SDL ATF STA
JUNK=/usr/spool/news/junk
NEWSDIR=/usr/spool/news
LIB=/usr/lib/news : See line 88
chmod u+wr $LIB/active
cd $JUNK
if /bin/test -z "`ls`" ; then exit
fi
chmod u+wr *
for j in $JUNK/*
do
for group in `egrep '^Newsgroups:' $j | head -1 | \
sed 's;Newsgroups:[ ];;' | \
sed 's;,; ;g'`
do
l=`egrep '^Control:' $j`
if /bin/test -n "$l" ; then
GROUPDIR="control"
group="control"
else
GROUPDIR=`echo $group | sed 's;\.;\/;g'`
fi
# Sick Lex... really sick!
cd $NEWSDIR
if /bin/test -d $GROUPDIR ; then
cd $GROUPDIR
l=`ls`
if /bin/test -n "$l" ; then
a=`ls | sort -r -n`
for f in $a
do
if /bin/test -f "$f" ; then
article=`echo $f "+1" | bc`
break
fi
done
else
article=1
fi
else
mkdir $NEWSDIR/$GROUPDIR
article=1
fi
cd $NEWSDIR/$GROUPDIR
if /bin/test ! -d "$article" ; then
cp $j $NEWSDIR/$GROUPDIR/$article
chmod ugo+wrx $NEWSDIR/$GROUPDIR/$article
chown news $NEWSDIR/$GROUPDIR/$article
chgrp news $NEWSDIR/$GROUPDIR/$article
entry=`egrep "^$group " $LIB/active`
if /bin/test -z "$entry" ; then
echo "Distribution: local \nControl: newgroup $group" | \
/usr/lib/news/inews -h -n control -t cmsg
the_date=`date`
echo "Created group $group at $date" >> $LIB/mvjunk-log
entry="$group 00001 00001 y" >> $LIB/localgroups
fi
entry="^$entry "
the_date=`date`
#
# There should be a way of passing shell variables into awk, but since
# we don't know how to do that we just hardwire it. Kludgy... no?
#
echo $article $entry $the_date | \
awk 'BEGIN { FS = " " } \
{ if ( NF != 11 ) printf "Munged active entry: %s\n",$0 >"/usr/lib/news/mvjunk-log" ; \
if ( length($1) > 5 ) printf "Field too large: %s\n",$0 >"/usr/lib/news/mvjunk-log" ; \
if ( length($3) > 5 ) printf "Field too large: %s\n",$0 >"/usr/lib/news/mvjunk-log" ; \
if ( length($4) > 5 ) printf "Field too large: %s\n",$0 >"/usr/lib/news/mvjunk-log" ; \
printf "/%s/s;%s;",$2,$3 ; \
for ( i = 5 - length($1) ; i > 0 ; i-- ) printf "0" ; \
print $1 ";" ; \
if ( length($4) < 5 ) { \
printf "s;%s;",$4 ; \
for ( i = 5 - length($1) ; i > 0 ; i-- ) printf "0" ; \
print $4 ";" \
} \
if ( $5 != "y" && $5 != "n" ) print "s;.$;y;" } \
END { printf "w\nq\n" }' | ed - $LIB/active
else
echo "Hey, there's a directory called $NEWSDIR/$GROUPDIR/$article!"
echo "Hey, there's a directory called $NEWSDIR/$GROUPDIR/$article!" >> $LIB/mvjunk-log
fi
done
if /bin/test -f $NEWSDIR/$GROUPDIR/$article ; then
/bin/rm -f $j # But my MOTHER lives in Hackensack!
else
echo "Couldn't find the article I just installed!"
echo "Couldn't find the article I just installed!" >> $LIB/mvjunk-log
fi
done
----
--
Regards,
David Wright STL, London Road, Harlow, Essex CM17 9NA, UK
dww@stl.stc.co.uk <or> ...uunet!mcvax!ukc!stl!dww <or> PSI%234237100122::DWW