103 lines
2.2 KiB
Bash
Executable File
103 lines
2.2 KiB
Bash
Executable File
#!/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;
|
|
|
|
cd "$(dirname "$0")"
|
|
SCRIPT_DIR="$(pwd)"
|
|
echo "Script directory: $SCRIPT_DIR"
|
|
|
|
# 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 < $SCRIPT_DIR/$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 < $SCRIPT_DIR/$1 | (cd $directory ; $TAR -xvpf - )
|