[comp.binaries.ibm.pc.d] Automatic extraction program for the korn shell

qintar@agora.rain.com (Jim Seymour) (05/23/91)

I have written a shell program which scans the articles in c.b.i.p. and
automatically extracts the files from them.  I will include it below if
anybody is interested.  Now, here are a couple of caveats...

First, I'm new to shell programming and so this is by no means an elegant
script!  If anybody has suggestions as to improving it, PLEASE let me know.
I'm also interested in making a Bourne shell equivalent so that it can
be used more universally.

Secondly, it tends to spit out a bunch of garbage when it can't find
certain files.  This causes no troubles, but is kind of distressing.

Here is the program.  Feedback to qintar@agora.rain.com would be appreciated!
---CUT-HERE---

# Set up the variables we'll be using
newsdir=/usr/spool/news/comp/binaries/ibm/pc
control=$HOME/.ibmtime
workdir=$HOME/tmp
destdir=/var/spool/ftp/pub/ibmpc
foundone=no

# Go to the news directory and scan articles newer than our control file
cd $workdir
for i in $newsdir/*
do if test -f $i && test $i -nt $control
   then exec < $i
      while read Ltype Vname Fname extra
      do if test $Ltype = 'Subject:'
	 then if test ${#Vname} = '8'
         then Fname=${Fname%%\,*}
            xx=${extra##*\(part }
            xx=${xx%%/*}
            yy=${extra##*/}
            yy=${yy%%\)*}
            echo $i is $Fname, part $xx of $yy
            foundone=yes
            if test $yy = '01'
            then echo Unpacking $Fname
	       uudecode < $i
            else cp $i $Fname.$xx
            fi
            fi
            break
         fi
      done
   fi
done
touch $control

if test $foundone = "yes"
then

# Decode the multi-part postings
for i in *.01
do echo Unpacking ${i%.*}
   cat ${i%.*}.* | sed '/^END/,/^BEGIN/d'| uudecode
   if test $? != "0"
   then echo ${i%.*} did not unpack correctly!
      rm ${i%.*}.zoo
   fi
done

# Check the .zoo files for errors.  If none, delete the individual parts
for i in *.zoo
do zoo xN $i
   if test $? != "0"
   then echo $i fails verification!
      rm $i
   else rm ${i%.*}.[0-9]*
   fi
done

# List the resulting files and move them to our destination directory
ls -l *.zoo
cp *.zoo $destdir
mv *.zoo $HOME/download

else echo No new articles found!
fi

du $destdir
exit

---CUT-HERE---
     -Jim Seymour                                qintar@agora.rain.com
     =================================================================
     Cipher Systems, Inc.,    P.O. Box 329,    North Plains, OR  97133