archie/release/scripts/untar

99 lines
2.1 KiB
Plaintext
Raw Normal View History

2024-05-27 20:18:02 +02:00
#!/bin/sh
#
# Untar a file safely by making backup of the files your are about to
# overwrite.
#
# 1994 (c) Regents of McGill University, School of Computer Science.
# by Luc Boulianne (lucb@cs.mcgill.ca)
#
usage () {
echo "Usage $0 [-v] [-d directory] tarfile.gz"
echo "Untar files safely by making backup of the files you"
echo "are about to overwrite."
echo "options: "
echo " [-d] cd to this directory before untarring"
echo " [-v] set debugging on"
echo " [-h] this help info"
echo ""
exit 2
}
# parse the command line arguments:
#
while [ $# -gt 1 ] ; do
case $1 in
-d) shift; directory=$1;;
-v) debug="y" ;;
-h) usage;; # call the usage funtion
*) # Catch anything that doesn't match the
# previous flags
echo "Unknown option [$1]";
usage;;
esac
shift
done
umask 000
MV=/bin/mv
TAR=tar
GZIP=gzip
MIDX=9;
# For solaris ...
PATH=/usr/ucb:$PATH
echo "Untarring $1 in the ${directory:=.} directory.";
index()
{
i=1;
while [ $i -le ${1:-$MIDX} ] ; do
echo -n "$i ";
i=`expr $i + 1`;
done
}
rindex()
{
i=${1:-$MIDX};
while [ $i -gt 0 ] ; do
echo -n "$i ";
i=`expr $i - 1`;
done
}
rotate()
{
fn=$1;shift;
for n in $* ; do
src=$fn.`expr $n - 1`
dest=$fn.$n
test -f $src && $MV -f $src $dest && echo " - $MV -f $src $dest"
done
test -f $fn && $MV -f $fn $fn.0 && echo " - $MV -f $fn $fn.0"
}
idx=`rindex`;
if [ x${debug:-x} = yx ] ; then
set -x;
fi
echo ""
echo "Uncompressing the tar file - this will take a moment..."
echo ""
echo "Note: Please do not interrupt while files are being rotated."
echo " The simple script, \`unrotate' has been supplied to unrotate files in"
echo " a given directory, should something go wrong."
echo ""
$GZIP -d < $1 | $TAR -tf - | while read file
do
cd $directory
echo $file
test -f $file && rotate $file $idx && echo "Rotated old file $file"
done
$GZIP -d < $1 | (cd $directory ; $TAR -xvpf - )