#!/bin/sh # # tgz [destination [source...] ] # # Make a gzip'd tar archive $1 (or stdout) out of specified files # (or, if not specified, from everything in the current directory) # # Requires gzip in the user's path. # # Requires gnu tar (or something close) in the user's path # due to use of --exclude, --totals and -S. # # 1994/02/19 DCN Created # 1994/12/01 DCN Cleanup and major improvements # # Copyright (C) 1994 David C. Niemi (niemi@tuxers.net) # The author requires that any copies or derived works include this # copyright notice; no other restrictions are placed on its use. # set -e set -u Error () { echo "Error: $0: ${@-}." >&2 exit 1 } if [ $# = 0 ]; then dest= src=. tar cvf - . | gzip -9v exit 0 elif [ $# = 1 ]; then dest=$1 src=. else dest=$1 shift src="${@-}" fi case $dest in "" | . | .. | */ | */. | */.. ) echo "Usage: $0: [destination [source...] ]" >&2 exit 1 ;; *.t?z | *.?z | *.z | *.Z | *.tz | *.tz? ) ;; *) dest=${dest}.tgz ## Add on .tgz as default suffix esac if [ -h "$dest" ]; then Error "Destination file \"$dest\" already exists as a symbolic link" elif [ -f "$dest" ]; then Error "Destination \"$dest\" already exists as a file" elif [ -d "$dest" ]; then Error "Destination \"$dest\" already exists as a directory" fi if [ -z "$dest" -o "X$dest" = 'X-' ]; then echo "Writing gzipp'd tar archive to standard output." >&2 tar cvfS - -- $src | gzip -9v else echo "Writing gzip'd tar archive to \"$dest\"." >&2 tar -cvS --totals --exclude "$dest" -f - -- $src | gzip -9v > "$dest" ls -l "$dest" >&2 fi exit 0