76 lines
1.7 KiB
Plaintext
76 lines
1.7 KiB
Plaintext
|
#!/bin/sh
|
||
|
# shell archiver
|
||
|
# usage: echo_list_of_files_one_per_line | shar > shell_archive
|
||
|
# or: shar list_of_files > shell_archive
|
||
|
# de-archive archive by executing it as a shell script (with .)
|
||
|
# unshar de-archives only the modified ones, with a message
|
||
|
|
||
|
TMP=/tmp/SHAR_$$
|
||
|
|
||
|
case $0 in ## UNSHAR
|
||
|
*unshar )
|
||
|
case $# in
|
||
|
0 ) echo "USAGE: unshar shar-file [files...]";exit 1;;
|
||
|
1) if test -f $1;then :;
|
||
|
else echo "unshar: cannot open $1";exit 1
|
||
|
fi
|
||
|
OLDWD=`pwd`
|
||
|
mkdir $TMP; cd $TMP
|
||
|
case $1 in
|
||
|
*/* ) sh $1;;
|
||
|
* ) sh $OLDWD/$1;;
|
||
|
esac
|
||
|
for FILE in `find . -print`; do
|
||
|
if test -d $FILE
|
||
|
then mkdir $OLDWD/$FILE 2>/dev/null
|
||
|
else if cmp -s $FILE $OLDWD/$FILE; then :
|
||
|
else echo unsharing $FILE;cp $FILE $OLDWD;fi
|
||
|
fi
|
||
|
done
|
||
|
cd $OLDWD
|
||
|
rm -rf $TMP
|
||
|
echo "Finished unsharing $1";;
|
||
|
|
||
|
*) FILE=$1;shift
|
||
|
if test -f $FILE;then :;
|
||
|
else echo "unshar: cannot open $FILE";exit 1
|
||
|
fi
|
||
|
for i in $*; do echo unsharing $i
|
||
|
awk '/END_OF_SHAR_FOR_'$i'/, /^END_OF_SHAR_FOR_'$i'/' < $FILE |/bin/sh
|
||
|
done;;
|
||
|
esac;;
|
||
|
|
||
|
## SHAR
|
||
|
* ) case $# in
|
||
|
0)while : ; do
|
||
|
read FILE
|
||
|
case $FILE in
|
||
|
'' ) exit 0;;
|
||
|
esac
|
||
|
if test -d $FILE
|
||
|
then echo "mkdir $FILE 2>/dev/null"
|
||
|
else
|
||
|
echo "cat > $FILE << \END_OF_SHAR_FOR_$FILE"
|
||
|
cat $FILE
|
||
|
echo "END_OF_SHAR_FOR_$FILE"
|
||
|
case `ls -l $FILE` in ???x*)echo "chmod a+x $FILE";;esac
|
||
|
fi
|
||
|
done;;
|
||
|
*)while test -n "$1" ; do
|
||
|
FILE=$1
|
||
|
if test -d $FILE
|
||
|
then echo "mkdir $FILE 2>/dev/null"
|
||
|
else
|
||
|
echo "cat > $FILE << \END_OF_SHAR_FOR_$FILE"
|
||
|
cat $FILE
|
||
|
echo "END_OF_SHAR_FOR_$FILE"
|
||
|
case `ls -l $FILE` in ???x*)echo "chmod a+x $FILE";;esac
|
||
|
fi
|
||
|
shift
|
||
|
done;;
|
||
|
esac;;
|
||
|
esac
|
||
|
|
||
|
|
||
|
|