davidsen@crdos1.crd.ge.COM (Wm E Davidsen Jr) (10/03/90)
Someone asked about rebuilding a .newsrc file. I have often wanted to build one from scratch which wouldn't take me all day. I started thinking about it and knocked out this little shell script which build a file. This subscribes to everything and allows you to mark things new in the last N days as unread. I find it a lot less painful to type 'u' than to have to add each group by hand. This script is SLOW. I didn't put much effort into making it fast, because the ability to read the recent articles requires a scan of the whole spool directory (or database, and that's no fun in shell). #!/bin/sh # rebuild .newsrc # - all groups will be subscribed # - articles for the last three days will be marked unread # (or use options to pick another date) # # author: Bill Davidsen - Oct 2, 1990 # initial values SPOOLDIR=/usr/spool/news AGE_LIMIT=3 LIBDIR="/usr/lib/news" # look for arguments # -aNN is age in days # -sXXX is alternate spool directory # -lXXX is alternate dir for active file while [ $# -gt 0 ] do case $1 in -s) SPOOLDIR=$2 shift;shift ;; -s*) SPOOLDIR=`expr $1 : '..\(.*\)'` shift ;; -a) AGE_LIMIT=$2 shift;shift ;; -a*) AGE_LIMIT=`expr $1 : '..\(.*\)'` shift ;; -l) LIBDIR=$2 shift;shift ;; -l*) LIBDIR=`expr $1 : '..\(.*\)'` shift ;; *) echo "Unknown option: $1" exit 1 ;; esac # done # # pipe the directory names into a loop to build the values cd $SPOOLDIR SELECT="-type f -name '[1-9]*' -mtime -${AGE_LIMIT}" sed 's/ .*$//' ${LIBDIR}/active | tr '.' '/' | while read newsgroup do # drop any group starting with . char1=`expr "$newsgroup" : '\(.\).*'` [ -z "$char1" -o "$char1" = "." ] && continue [ ! -d $newsgroup ] && { # just the group name, nothing read echo "$newsgroup:" | tr '/' '.' continue } file1=`eval find $newsgroup ${SELECT} -print | sort -n | head -1` [ -z "$file1" ] && { # just the group name, nothing read echo "$newsgroup:" | tr '/' '.' continue } file1=`basename $file1` last1=`expr $file1 - 1` echo "$newsgroup: 1-$last1" | tr '/' '.' done # -- bill davidsen (davidsen@crdos1.crd.GE.COM -or- uunet!crdgw1!crdos1!davidsen) VMS is a text-only adventure game. If you win you can use unix.