webber@aramis.rutgers.edu.UUCP (09/16/87)
The universal language for referring to messages in news is by their message ids, which appear on Reference and Message-ID lines of the news headers. However, it is sometimes a nuissance to track down a news message when all you know is its header. Below, I describe a simple way to do this. Enjoy. --------- BOB (webber@aramis.rutgers.edu ; rutgers!aramis.rutgers.edu!webber) #!/bin/sh # This is a usage of the Bourne Shell language to describe an algorithm. # It is not a program. However, on some computers it is very easy to # turn it into a program if you really wanted to. Before doing so, # realize that you really don't know where this file has been or what # devious things have been put into it. You really want to read it # through yourself (and probably change a few things to make it work # better on your machine anyway). # The following shell variable initializations allow me to look at messages # whose message id contains the structure of $1 (on a Sun III), for # example when looking up an article that another article referred to. # The notation for $1 is greppease, which can describe quite a few different # kinds of things. MainNews=/usr/spool/news # The directory where all the news is kept HistoryFile=/usr/lib/news/history # The directory where the news system # keeps track of which message ids went # where Work=$HOME/.FindParent # A seemingly harmless name for scratchspace Temp=$HOME/.FindParentTemp # A different name with the same property if [ $# = 0 ] then echo Usage: \$\1 must be a valid arguement to grep exit else echo Will be searching for $1 fi rm -i $Temp $Work grep $1 $HistoryFile | awk \{print\ \$\4\ \} >$Temp # WARNING: The C version of news will have group info in a different column, # but currently the newsgroup/number is in the 4th column of the # entry in $HistoryFile that was matched. # Translates a newsgroup name into a file name relative to $MainNews tr . / <$Temp >$Work if [ ! -s $Work ] then echo No entry in $HistoryFile containing $1 found. exit fi while [ -s $Work ] do # Shuffle through the lines of $Work in case of multiple matches LoopIndex=`head -1 $Work` tail +2 $Work >$Temp mv $Temp $Work # The user interface, such as it is :-) echo -n Want to try $LoopIndex \(y/n/q\): read Answer if [ $Answer = "y" ] then more $MainNews/$LoopIndex elif [ $Answer = "q" ] then exit fi done exit # That's all there is to it.