home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gwm18a.zip / unshar < prev    next >
Text File  |  1995-07-03  |  2KB  |  76 lines

  1. #!/bin/sh
  2. # shell archiver
  3. # usage: echo_list_of_files_one_per_line | shar > shell_archive
  4. #    or: shar list_of_files > shell_archive
  5. # de-archive archive by executing it as a shell script (with .)
  6. # unshar de-archives only the modified ones, with a message
  7.  
  8. TMP=/tmp/SHAR_$$
  9.  
  10. case $0 in        ## UNSHAR
  11. *unshar ) 
  12.     case $# in
  13.      0 ) echo "USAGE: unshar shar-file [files...]";exit 1;;
  14.     1) if test -f $1;then :;
  15.             else echo "unshar: cannot open $1";exit 1
  16.             fi
  17.        OLDWD=`pwd`
  18.        mkdir $TMP; cd $TMP
  19.        case $1 in
  20.        */* ) sh $1;;
  21.        *   ) sh $OLDWD/$1;;
  22.        esac
  23.        for FILE in `find . -print`; do
  24.        if test -d $FILE
  25.        then mkdir $OLDWD/$FILE 2>/dev/null
  26.        else if cmp -s $FILE $OLDWD/$FILE; then :
  27.           else echo unsharing $FILE;cp $FILE $OLDWD;fi
  28.        fi
  29.        done
  30.        cd $OLDWD
  31.        rm -rf $TMP
  32.        echo "Finished unsharing $1";;
  33.  
  34.     *) FILE=$1;shift
  35.        if test -f $FILE;then :;
  36.           else echo "unshar: cannot open $FILE";exit 1
  37.        fi
  38.        for i in $*; do echo unsharing $i
  39.        awk '/END_OF_SHAR_FOR_'$i'/, /^END_OF_SHAR_FOR_'$i'/' < $FILE |/bin/sh
  40.        done;;
  41.      esac;;
  42.  
  43.             ## SHAR
  44. *  ) case $# in
  45.      0)while : ; do
  46.     read FILE
  47.     case $FILE in
  48.     '' ) exit 0;;
  49.     esac
  50.     if test -d $FILE
  51.     then echo "mkdir $FILE 2>/dev/null"
  52.     else
  53.       echo "cat > $FILE << \END_OF_SHAR_FOR_$FILE"
  54.       cat $FILE
  55.       echo "END_OF_SHAR_FOR_$FILE"
  56.       case `ls -l $FILE` in ???x*)echo "chmod a+x $FILE";;esac
  57.     fi
  58.       done;;
  59.      *)while test -n "$1" ; do
  60.     FILE=$1
  61.     if test -d $FILE
  62.     then echo "mkdir $FILE 2>/dev/null"
  63.     else
  64.       echo "cat > $FILE << \END_OF_SHAR_FOR_$FILE"
  65.       cat $FILE
  66.       echo "END_OF_SHAR_FOR_$FILE"
  67.       case `ls -l $FILE` in ???x*)echo "chmod a+x $FILE";;esac
  68.     fi
  69.     shift
  70.       done;;
  71.     esac;;
  72. esac
  73.  
  74.  
  75.     
  76.