Thread View: comp.unix.shell
4 messages
4 total messages
Started by Wm E Davidsen Jr
Tue, 02 Oct 1990 19:20
Rebuild a .newsrc file
Author: Wm E Davidsen Jr
Date: Tue, 02 Oct 1990 19:20
Date: Tue, 02 Oct 1990 19:20
85 lines
2703 bytes
2703 bytes
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.
Re: Rebuild a .newsrc file
Author: Lawrence V. Cipriani
Date: Wed, 03 Oct 1990 01:40
Date: Wed, 03 Oct 1990 01:40
19 lines
1111 bytes
1111 bytes
In article <2713@crdos1.crd.ge.COM>, davidsen@crdos1.crd.ge.COM (Wm E Davidsen Jr) writes:
>
> Someone asked about rebuilding a .newsrc file.
Here's a pretty quick one in awk.
# this will create a .newsrc for folks showing that they've suscribed
# to all groups and haven't read anything. This keeps rn from bothering
# the new user with hundereds of "... not in .newsrc. Add[y/n]? " messages.
awk '{
if($3 > 0) {
printf("%s: 1-%d\n", $1, $3-1);
} else {
printf("%s: \n", $1);
}
}' /usr/lib/news/active > .newsrc
--
Larry Cipriani, att!cbvox!lvc or lvc@cbvox.att.com
"Save a logger, eat an owl"
Re: Rebuild a .newsrc file
Author: Matthew Farwell
Date: Thu, 04 Oct 1990 15:46
Date: Thu, 04 Oct 1990 15:46
15 lines
1157 bytes
1157 bytes
In article <1990Oct3.014039.27275@cbnews.att.com> lvc@cbnews.att.com (Lawrence V. Cipriani) writes: >In article <2713@crdos1.crd.ge.COM>, davidsen@crdos1.crd.ge.COM (Wm E Davidsen Jr) writes: >> Someone asked about rebuilding a .newsrc file. >Here's a pretty quick one in awk. > [ solution deleted ] or sed -e 's/ .*/:/' /usr/lib/news/active > $HOME/.newsrc Dylan. -- Matthew J Farwell | Email: dylan@ibmpcug.co.uk The IBM PC User Group, PO Box 360,| ...!uunet!ukc!ibmpcug!dylan Harrow HA1 4LQ England | CONNECT - Usenet Access in the UK!! Phone: +44 81-863-1191 | Sun? Don't they make coffee machines?
Re: Rebuild a .newsrc file
Author: Dan_Jacobson
Date: Fri, 05 Oct 1990 03:53
Date: Fri, 05 Oct 1990 03:53
144 lines
4483 bytes
4483 bytes
Mine takes regular expressions of your liked/disliked groups and sorts
the .newsrc. Since it depends on sed/awk, etc, I noticed it poops out
on long lines, so I stopped using it. Plus now that I'm using GNUS, I
hope to find a more high tech solution.
[Cheapest shar, and signature at end...]
echo x - newsrc-rx
sed 's/^X//' >newsrc-rx <<'*-*-END-of-newsrc-rx-*-*'
X# regular expressions for my home-made newsrc sorter. Dan_Jacobson@ATT.COM
X# this file holds the "loved" newsgroups regular expressions
X# `#' is a comment character at beginning of line.
X# [Was] Always being refined, sloppy, order not too signifigant, especially
X# further down.
X
X#if .newsrc lines are too long, screws up.
X
X# Loacl issues, and emergency stuff, etc.
X^general|important
X^ih
X^att
X^chi
X
X# Things that are going to make my job easier, or pointers to job-easers
X#^gnu\\.(announce|bash|misc|utils|ghost|emacs|gdb)
Xgnu
Xemacs|editors
X\\.tex[^a-z]
Xcomp\\.(fonts|text)
X\\.sun
Xblit|tty5620
X#comp\\.dcom\\.(modems|telecom)
Xalt\\.sources
Xcomp\\.sources(:|\\.d|\\.misc|\\.unix|\\.wanted)
Xarchive
Xcomp\\.unix
X#bugs\\.(sys5|bsd|sun)
Xbugs
X^news\\.announce\\.new
X^news\\.(lists|newusers)
Xsecurity|\\.doc
X\\.x[.:]
X
X#Things that make life easier
X
Xtelecom
Xcomp\\.risks
Xsci\\.(med|lang)
Xrec\\.travel|driving
Xastro
X#comp\\.org
Xrec\\.food\\.veg
Xconsumers
X#backcountry
X\\.mail
X#asian|china|culture|korean|africa
Xnews
Xculture
Xmusic
Xlegal
Xenvironment
X\\.invest|\\.taxes
Xgnu
X#^comp
Xconference
X^sci
X#^rec
X^soc
X^list
X#^alt
X#^misc
X#^talk
*-*-END-of-newsrc-rx-*-*
echo x - newsrc-rx-kill
sed 's/^X//' >newsrc-rx-kill <<'*-*-END-of-newsrc-rx-kill-*-*'
X# Dan_Jacobson@ATT.COM
X# this file holds the "hated" newsgroups regular expressions
X#these go to the bottom of $NEWSRC
X\\.amiga|\\.atari|\\.ibm|\\.binaries|\\.test|sport|games|^ak\\.
X^al\\.|^alc\\.|^an\\.|^atl\\.|^bionet\\.
X^biz\\.|^cb\\.|^control|^dr\\.|^er\\.|^essug\\.|^ga\\.|^hl\\.|^ho\\.|^in\\.
X^junk|^lc\\.|^mh\\.|^ne\\.|^nj\\.|^oh\\.|^pk\\.|^pr\\.|^princeton\\.|^rd\\.
X^sf\\.|^unix-pc\\.|^wb\\.|^wh\\.|^wi\\.|^inh\\.|philosophy|\\.cray|\\.msdos
X\\.xenix|\\.sco[.:]|\\.vms:|^att\\.(lib|jobdigest)|physics|ps-maps|\\.aix
X\\.aux|[234]86|\\.ultrix
*-*-END-of-newsrc-rx-kill-*-*
echo x - rcsrt
sed 's/^X//' >rcsrt <<'*-*-END-of-rcsrt-*-*'
X: Dan_Jacobson@ATT.COM. Sort .newsrc file my style. Last edit: 8/1990
Xtrap '' 1 15 #best?
Xset -xe #quit on error
X: ${NEWSRC=$HOME/.newsrc}
Xreg_exp_file=${1-$HOME/newsrc-rx} #a file full of regular expression strings
Xin=/tmp/$$in out=/tmp/$$out
X#backup=$HOME/NEWSRC$$
Xbackup=/usr/tmp/.NEWSRC$$
Xkill_file=$HOME/newsrc-rx-kill
Xtrash=/tmp/$$trash
Xtest -f "$reg_exp_file" -a -f "$NEWSRC" -a $# -lt 2 -a ! -f $in -a ! -f \
X $out -a ! -f $backup -a ! -f $trash
Xcp $NEWSRC $backup && compress $backup #be thrifty on disk space
Xcp $NEWSRC $in
Xset +e
X#for reg_exp in `cat $reg_exp_file` #but *blanks* & newlines separate words
X
X#put the junk at bottom
Xtest -f $kill_file &&
X{
Xexec 3<$kill_file
Xwhile read reg_exp <&3
Xdo
X case "$reg_exp" in \#*|'') continue;; esac # "#" is comment character
X #blank lines with no spaces ok too.
X egrep "$reg_exp" $in >> $trash
X egrep -v "$reg_exp" $in > $in.tmp
X mv $in.tmp $in
Xdone
X}
X
Xexec 3<"$reg_exp_file"
Xwhile read reg_exp <&3
Xdo
X case "$reg_exp" in \#*|'') continue;; esac
X egrep "$reg_exp" $in | sort >> $out
X egrep -v "$reg_exp" $in > $in.tmp
X mv $in.tmp $in
Xdone
Xset -e
X{ cat $out; sort $in; cat $trash;} > $NEWSRC
Xrm $out $in $trash
X
X
X
Xexit
X#to make a test file...
Xset -ex
Xcp .newsrc NEWSRC-REAL
Xsed 's/\([:!]\).*/\1/' NEWSRC-REAL > .newsrc
Xrcsrt
Xsed 's/\([:!]\).*/\1/' NEWSRC-REAL | diff - .newsrc
*-*-END-of-rcsrt-*-*
exit
--
Dan_Jacobson@ATT.COM Naperville IL USA +1 708-979-6364
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads