Yet Another Bourne Script (YABS!)
Joe Angelo
joe at tekbspa.UUCP
Sun May 8 08:11:02 AEST 1988
Here is yet another stupid script and very customized to a particular
need --
I've been collecting usenet sources for 6 yrs now either from
USENET postings or from the work of others in preparing an
archive site. Collecting from USENET is still a do-it-by-hand
procedure; however, the later, collecting from an archive site
and be made semi-automatic --> providing a directory listing of
the sources is given.
Most archive sites are into providing a "LISTING" file which is
simply an 'ls -lR' of thier directory tree. So, it's nice to
edit the LISTING file and select what you want to retreive.
Generallly, LISTING files are rather large and an interactive
"Do you want to copy this one?" script is pretty darn boring.
Since automation to me still means interaction ;-), my method
is to ``vi LISTING'' and pipe interesting lines to a script
called "gf" ... gf then returns a UUCP command line and the
editor replaces the orginal lines with the UUCP commands.
When I've finished, I simply grep the UUCP lines from my new
LISTING file and pipe them to ``sh -v''.
gf.sh needs SYSTEM defined as the remote UUCP system (you must
have a direct UUCP connection) and DIRLISTING as the ``ls -lR''
output file from that site. ``gf'' then scans the DIRLISTING file for
lines that match it's stdin (as pipe into it from vi with ``#!!'');
while scanning, ``gf'' reminders the last directory name it's seen
(a directory name is a line in DIRLISTING that ends with ":" and
relative pathnames will need minor correcting); ``gf'' then produres
output such as:
D=dirname; mkf $D; uucp SYSTEM!$d/file.. $d
"file", ofcourse, is $NF on the input line.
For example, if your LISTING file contained:
/u3/archive/sources/alt:
total 0
/u3/archive/sources/games:
total 6
drwxr-xr-x 3 news news 112 Dec 10 14:38 others
drwxr-xr-x 12 news news 704 Dec 10 10:12 vol1
drwxr-xr-x 12 news news 384 Dec 10 11:40 vol2
drwxr-xr-x 17 news news 384 Mar 11 22:47 vol3
drwxr-xr-x 4 news news 112 Apr 10 22:47 vol4
drwxr-xr-x 2 news news 32 Apr 8 13:37 vol5
/u3/archive/sources/games/others:
total 267
-rw-r--r-- 1 news news 50686 Jun 15 1987 atc.TAR.Z
-rw-r--r-- 1 news news 2821 Dec 10 12:13 calform.shar.Z
drwxr-xr-x 2 news news 176 Dec 10 14:38 empire
-rw-r--r-- 1 news news 11713 Jun 15 1987 lotto.sh.Z
-rw-r--r-- 1 news news 200134 Jun 15 1987 phan.TAR.Z
/u3/archive/sources/games/others/empire:
.
.
And, in vi, you moved to atc.TAR.Z and piped two lines into ``gf'',
via the vi-commands "2!!gf", ``gf'' returns:
D=/u3/archive/sources/games/others;mkt $D; uucp aeras!$D/atc.TAR.Z ./$D
D=/u3/archive/sources/games/others;mkt $D; uucp aeras!$D/calform.shar.Z ./$D
``gf'' will do nothing but, perhaps, alter your LISTING file (so
use a temp copy...gosh) and it's eash to modify ``gf'' to return the
input string as output and print the UUCP command line into yet another
file (printf... >> "outfile"). Later, you simply grep '^D=' from
your new listing and pump to the shell.
``mkf'' (also enclosed) as yet-yet another stupid script to
make relative directories given pathname arguments; thus, preserving
the orginal directory structure from the remote machine (but from
a relative point in your file system).
gf.sh:
# IFS is nothing but a start and end quote on two lines.
IFS='
'
SYSTEM=aeras
DIRLISTING=LISTING.work
# get stdin
FILES=`cat `
for file in $FILES
do
awk < $DIRLISTING '
NF >= 1 {
if(substr($1,length($1),1) == ":") {
LASTDIR=substr($1,1,length($1)-1)
}
if( $0 == "'$file'") {
printf("D=%s;mkt $D; uucp '$SYSTEM'!$D/%s ./$D\n", LASTDIR, $NF)
exit 0
}
}'
done
mkt:
for f in $*
do
# ...spaces below, not tabs.
list=`echo $f | tr '/' ' '`
for dir in $list
do
parts="$parts$dir/"
mkdir `echo $parts | sed 's;/$;;'` 2>/dev/null
chmod 777 $parts
done
done
--
"I'm trying Joe Angelo -- Senior Systems Engineer/Systems Manager
to think at Teknekron Software Systems, Palo Alto 415-325-1025
but nothing
happens!" uunet!tekbspa!joe -OR- tekbspa!joe at uunet.uu.net
More information about the Alt.sources
mailing list