[comp.unix.questions] Looking for SYS V r3 shar/unshar

SJBACKUS@cc.utah.edu (12/17/90)

Does anyone know of a version of shar/unshar for SYS V r 3?

Replies gratefully accepted bye backus@csc-sun.math.utah.edu.

Steve

felps@convex.com (Robert Felps) (12/17/90)

In <104414@cc.utah.edu> SJBACKUS@cc.utah.edu writes:

>Does anyone know of a version of shar/unshar for SYS V r 3?

Here is a Bourne shell script [un]shar and the man page.
It's not the lastest [un]shar.c, but it works.

--------------------------------- cut here ----------------------------------
#!/bin/sh
# @(#) shar 1.0 - create a shell archive file
# AUTHOR: Robert Felps
# DATE  : Aug 27 16:23:50 CDT 1989
# SYNTAX: shar files
# OPTS  :
# ARGS  : files  - list of files to be archived
# FILES :
# UPDATED BY:
# ON        :
# CHANGES   :
#
# vi/ex: set ts=4
#
# check for existing $SHAR_FILE
#
SHAR_FILE=sharfile
TMP=/tmp/shar.$$
case "$0" in
 *unshar*)	if [ $# -gt 0 ]
			then
				while [ -n "$1" ]
				 do
					if [ -f "$1" ]
					then awk '/^#!/,/^SOME-NON-EXISTENT-STR/ {
							 print }' $1 > $TMP
						 sh $TMP
						 rm -f $TMP
					else echo "No file $1 to unarchive!"
						 EXIT=9
					fi
					shift
				 done
			else 
				if [ -f "$SHAR_FILE" ]
				then sh "$SHAR_FILE"
				else echo "No file($1 or $SHAR_FILE) to unarchive!"
					 exit 1
				fi
			fi
			exit $EXIT ;;
   *shar*)	while [ -n "$1" ]
			 do
			  case "$1" in
				-o) shift ; SHAR_FILE=$1 ;;
				-o*) SHAR_FILE=`expr $1 : '..\(.*\)'` ;;
				 *) break ;;
			  esac
			  shift
			 done ;;
esac
if [ -f "$SHAR_FILE" ]
then echo "Sorry, will not overwrite existing \"$SHAR_FILE\""
     exit 2
fi

if [ $# -eq 0 ]
then echo "Must specify files to archive!"
	 exit 3
fi

 # create the header in the $SHAR_FILE
  cat > $SHAR_FILE <<\HDR_EOF
#!/bin/sh
# This is a SHell ARchive(shar), meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#
# List of Archived Files:
#
HDR_EOF

 # list the files to be archived
for A
 do
  if [ -d "$A" ]
  then echo "#      $A (dir)"              >> $SHAR_FILE
  else echo "#      $A"                    >> $SHAR_FILE
  fi
 done
echo "#"                              >> $SHAR_FILE
echo "# This archive created: `date`" >> $SHAR_FILE
echo "#"                              >> $SHAR_FILE

 # Do the archiving
for A
 do
  if [ -d "$A" ]
  then
       cat >> $SHAR_FILE <<EXTRACT_EOF
echo "d - $A (Making Directory)"
mkdir $A
EXTRACT_EOF
       echo "d - $A (Making Directory)"
  else
  CHARS=`wc -c < $A`
  CHARS=`echo $CHARS`
  if [ "$CHARS" = "0" ]
  then echo "The archive file is empty!"
  else

   # insert extracting script for beginning of archived file
  cat >> $SHAR_FILE <<EXTRACT_EOF
echo "x - $A ($CHARS characters)"
if [ -f "$A" ]
then echo "\$0: will not over-write existing file '$A'"
else
sed 's/^X\./\./' <<\SHARC_EOF > $A
EXTRACT_EOF

   # ARCHIVE THE FILE!
  sed 's/^/X\./' $A >> $SHAR_FILE

   # insert extracting script for end of archived file
  cat >> $SHAR_FILE <<EXTRACT_EOF
SHARC_EOF
if [ $CHARS -ne \`wc -c < $A\` ]
then echo "\$0: transmit error '$A' (should have been $CHARS chars)"
fi
fi # end of overwriting check
EXTRACT_EOF
  echo "a - $A ($CHARS characters)"
  fi # [ "$CHARS" = "0" ]
  fi # [ -d "$A" ]
done
--------------------------------- cut here ----------------------------------
TH shar 1L "" "Local Commands"
SH NAME
shar - shell archive program
SH SYNOPSIS
B shar
[\fB -f \fIfile\fR ] \fIfile_list\fR
SH DESCRIPTION
The \fBshar\fR command archives multiple files to a single archive file.
It combines the files using shell commands. Thus to extract the files all
you have to do is run the /bin/sh (Bourne Shell) on the sharfile.
sp
It is advisable to use the \fBncp\fR command before using the \fRftpcp\fR
command.
SH OPTIONS
RS
PD 1
TP 10
B -f \fIfile\fR
Use \fIfile\fR as the filename for the archive file.
The default filename is \fIsharfile\fR.
RE
SS ARGUMENTS
RS
PD 1
TP 15
\fIfile_list\fR
A list of files you wish to archive.
The files should all be in the present working directory.
RE
SH EXAMPLES
To archive files from present directory to the sharfile,
sp
\fBshar *\fR
sp
To unarchive files from the sharfile,
sp
\fBsh sharfile\fR
sp
SH FILES
/share/bin/shar
SH SEE ALSO
tar(1), cpio(1)
SH WARNING
Beta version.