80 lines
2 KiB
Bash
80 lines
2 KiB
Bash
#! /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
|