diff options
Diffstat (limited to 'examples/scripts.v2/untar')
-rw-r--r-- | examples/scripts.v2/untar | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/examples/scripts.v2/untar b/examples/scripts.v2/untar new file mode 100644 index 0000000..1ba6b6b --- /dev/null +++ b/examples/scripts.v2/untar @@ -0,0 +1,80 @@ +#! /bin/bash +# +# original from: +# @(#) untar.ksh 1.0 93/11/10 +# 92/10/08 john h. dubois iii (john@armory.com) +# 92/10/31 make it actually work if archive isn't in current dir! +# 93/11/10 Added pack and gzip archive support +# +# conversion to bash v2 syntax done by Chet Ramey + +phelp() +{ +echo \ +"$name: extract tar archives into directories, uncompressing if neccessary. +Usage: $name archive[.tar[.[Z|gz]]] .. +If an archive name given does not end in .tar, .tar.Z, or .tar.gz, it is +searched for first with .tar added, then .tar.Z, and then .tar.gz added. +The real filename must end in either .tar, .tar.Z, or .tar.gz. A +directory with the name of the archive is created in the current directory +(not necessarily the directory that the archive is in) if it does not +exist, and the the contents of the archive are extracted into it. +Absolute pathnames in tarfiles are suppressed." +} + +if [ $# -eq 0 ]; then + phelp + exit 1 +fi + +name=${0##/} +OWD=$PWD + +for file; do + cd $OWD + case "$file" in + *.tar.Z) ArchiveName=${file%%.tar.Z} zcat=zcat;; + *.tar.z) ArchiveName=${file%%.tar.z} zcat=pcat;; + *.tar.gz) ArchiveName=${file%%.tar.gz} zcat=gzcat;; + *) ArchiveName=$file + for ext in "" .Z .z .gz; do + if [ -f "$file.tar$ext" ]; then + file="$file.tar$ext" + break + fi + done + if [ ! -f "$file" ]; then + echo "$file: cannot find archive." 1>&2 + continue + fi + ;; + esac + if [ ! -r "$file" ]; then + echo "$file: cannot read." >&2 + continue + fi + DirName=${ArchiveName##*/} + [ -d "$DirName" ] || { + mkdir "$DirName" || { + echo "$DirName: could not make archive directory." 1>&2 + continue + } + } + + cd $DirName || { + echo "$name: cannot cd to $DirName" 1>&2 + continue + } + + case "$file" in + /*) ;; + *) file=$OWD/$file ;; + esac + + echo "Extracting archive $file into directory $DirName..." + case "$file" in + *.tar.Z|*.tar.z|*.tar.gz) $zcat $file | tar xvf -;; + *.tar) tar xvf $file;; + esac + echo "Done extracting archive $file into directory $DirName." +done |