home *** CD-ROM | disk | FTP | other *** search
- From: joe@auspyr.UUCP (Joe Angelo)
- Newsgroups: comp.sources.misc
- Subject: Recursive(dir) UUCP queuer script; someone might need it someday
- Message-ID: <2846@ncoast.UUCP>
- Date: 11 Jul 87 02:07:56 GMT
- Sender: allbery@ncoast.UUCP
- Organization: Austec, Inc., San Jose, CA. USA
- Lines: 215
- Approved: allbery@ncoast.UUCP
- Xref: ncoast comp.sources.misc:130 alt.sources:3
- X-Archive: comp.sources.misc/8707/42
-
- [[ sent to alt.sources, comp.sources.unix ]]
-
- This is the sort of thing we aren't likely to see (anymore) in a moderated
- news group... [[ no, I'm not trying to start anything!! ]]
-
- -------------------------------------------------------------------------
-
- echo >/dev/null '
-
- I have seen lots of requests for a recursive UUCP script; most of which
- generate a "uucp" command line at the end of a "find"; ei: find -exec uucp.
- Yukky and boring. Well, my method is not much better.
-
- The attached script will generate a C. file for the remote system
- and place it in the UUCP queque dirs (if permissions provide, otherwise,
- the file is saved elsewhere; like /tmp). The script works for V7, BSD,
- and HoneyDanber UUCP since the format of C. files is exactly the same;
- even the name is VERY similar.
-
- The only problem might be that some systems use a 5 character instead of
- a 6 character UUCP ID string in the name of the C. file; it is easy to
- fix if you have one of these systems -- look for the sick sed line.
-
- There are some problems expanding .. and ../../../../.., but what the
- heck -- this script was mostly designed for internal xfer of large
- directories of source code and was found to be quite useful.
-
- Any/all suggestions/warnings/impeachments welcome...
-
- --
- "Need input. Joe Angelo, Sr. Sys. Engineer @ Austec, Inc., San Jose, CA.
- More input. ARPA: auspyr!joe@lll-tis[-b].arpa PHONE: [408] 279-5533
- Ahhh, input!" UUCP: {sdencore,cbosgd,ptsfa,dana}!aussjo!joe
- UUCP: {amdahl,lll-tis,imagen,necntc,dlb,sci,altnet}!auspyr!joe
- '
-
- # uuqr -- takes file name list from stdin or args (via find) and generates
- # a C. file for uucp in the name of the remote system.
- #
- # usage:
- #
- # uuqr [dirs] system!directory
- #
- # examples:
- #
- # uuqr /tmp anysystem! xfer all in /tmp to anysystem!~nuucp/tmp/
- # uuqr /tmp anysystem!/foo xfer all in /tmp to anysystem!/foo/tmp
- # uuqr /tmp anysystem!/ xfer all in /tmp to anysystem!/tmp
- # uuqr . anysystem!/duplicate xfer all in . to anysystem!/duplicate
- #
- # uuqr anysystem xfer all f-names from stdin to anysystem!~nuucp
- # uuqr anysystem!/tmp xfer all f-namme from stdin to anysystem!/tmp
-
- case $# in
- 0)
- echo Usage: $0 '[dirs] system!directory
-
- Where: dirs is a find(1) dir_name or nothing to denote
- that file name list comes from standard input'
- exit
- ;;
- esac
-
- #
- # UUCP queue organization
- #
- # Set TYPE to: If:
- # LINEAR /usr/spool/uucp contains FILES in form of C.*, D.*, X.*.
- # SUBDIRS /usr/spool/uucp contains DIRS in form of C. D. X., D.hostname.
- # HONEYBABY /usr/spool/uucp contains DIRS for each remote host.
-
- TYPE=HONEYBABY
- TYPE=LINEAR
- TYPE=SUBDIRS
-
- PWD=`pwd`
- DIR=/usr/spool/uucppublic
-
- #
- # USER=$LOGNAME if SYSV
- #
- USER=$USER
- for arg in $*
- do
- case "$arg" in
- *!*)
- HOST=`echo "$arg" | cut -d! -f1`
- XDIR=`echo "$arg" | cut -d! -f2`
- DIR=`echo $XDIR | awk ' {
- if( substr($1,1,1) != "/" )
- printf("/usr/spool/uucppublic/%s\n", $1)
- else
- printf("%s\n", $1)
- }'`
- ;;
- *) LIST="$LIST $arg"
- ;;
- esac
- done
-
- #
- # generate the directory name to store the file into
- #
- SPOOLDIR=/usr/spool/uucp
-
- case "$TYPE" in
- HONEYBABY) SPOOLDIR="/usr/spool/uucp/$HOST"
- if test ! -d $SPOOLDIR
- then
- mkdir $SPOOLDIR 1>/dev/null 2>&1
- fi
- ;;
- LINEAR) SPOOLDIR="/usr/spool/uucp" ;;
- SUBDIRS) SPOOLDIR="/usr/spool/uucp/C." ;;
- esac
-
- OLDPLACE=$SPOOLDIR
-
- #
- # make sure spool dir exists
- #
- DIDERROR=/bin/false
-
- if test ! -d "$SPOOLDIR"
- then
- echo $0: spool dir non existant, output saved elsewhere...
- DIDERROR=/bin/true
- SPOOLDIR=/tmp
- fi
-
- #
- # make sure we can write to the spool dir,
- # most portable way is to echo something into a file there; test -w nonstandard
- #
-
- echo neat_stuff > /tmp/WAMMO$$
- if cp /tmp/WAMMO$$ $SPOOLDIR/WAMMO$$ 1>/dev/null 2>&1
- then
- neat=yup
- else
- echo $0: can not write to spooldir, output saved elsewere...
- DIDERROR=/bin/true
- SPOOLDIR=/tmp
- fi
-
- rm -f /tmp/WAMMO$$ $SPOOLDIR/WAMMO$$
-
- #
- # generate the hostname part of the C. file...
- # usually 6 characters only -- change for more or less.
- #
- HOSTPART=`echo $HOST | sed 's/^\(......\)\(.*\)/\1/'`
-
- #
- # generate a UNIQ ID string
- #
-
- STILLWORKING=/bin/true
- tmpid=$$
-
- while $STILLWORKING
- do
- # edit below if you have 6 character UUCP ids and not 5...
- UUCP_ID=`echo $tmpid | sed '
- s/^\([0-9][0-9][0-9][0-9]\)$/A\1/
- s/^\([0-9][0-9][0-9]\)$/AA\1/
- s/^\([0-9][0-9]\)$/AAA\1/
- s/^\([0-9]\)$/AAAA\1/'`
- CFILE=$SPOOLDIR/C.$HOSTPART$UUCP_ID
- if test ! -f $CFILE
- then
- break
- fi
- tmpid=`expr $tmpid + 1`
- done
-
- echo $0: saving output in $CFILE
-
- #
- # is filename list from args or stdin?
- #
- (
- if test ! -s "$LIST"
- then
- find $LIST -type f -print
- else
- echo stdin
- while read FILENAME
- do
- echo $FILENAME
- done
- fi
- ) | awk '
- {
- # convert relative to absolute.
- # keep absolute as is.
- if( substr($1,1,1) != "/" )
- name="'$PWD'/"$1
- else
- name=$1
- printf("S %s '$DIR'/%s '$USER' -dc D.0 777\n", name, $1);
- }' | tr -s '/' > $CFILE
-
- if $DIRERROR
- then
- echo $0: someday, you should move $CFILE to $OLDPLACE
- else
- echo $0: $CFILE ready, now call the remote system...
- fi
- --
- "Need input. Joe Angelo, Sr. Sys. Engineer @ Austec, Inc., San Jose, CA.
- More input. ARPA: auspyr!joe@lll-tis[-b].arpa PHONE: [408] 279-5533
- Ahhh, input!" UUCP: {sdencore,cbosgd,ptsfa,dana}!aussjo!joe
- UUCP: {amdahl,lll-tis,imagen,necntc,dlb,sci,altnet}!auspyr!joe
-