File: unpack-sh


#!/bin/sh
# Fri Jan  5 14:57:59 EST 2001
# /usr/local/bin/unpack
# Copyright 2001, 2002, Chris F.A. Johnson
# Released under the terms of the GNU General Public License

for file in "$@"
do
    case $file in

	*.zip|*.ZIP)
	    unzip "$file"
	    ;;

	*.tar)
	    tar xvpf "$file"
	    ;;

Files with .tar.gz and .tgz suffixes are the same format: a tar archive compressed with gzip. The .Z suffix is used by compress. Gunzip can uncompress such files.

I use "gunzip -c" explicitly, because the z command is not included in all versions of tar.

	*.tgz|*tar.gz|*.tar.Z)
	    gunzip -c "$file" | tar xvp
	    ;;

	*.tar.bz2|*.tbz2)
	    bunzip2 -c "$file" | tar xvp
	    ;;

	## gzipped and bzip2ed files are uncompressed to the current
	## directory, leaving the original files in place
	*.gz)
	    gunzip -c "$file" > `basename "$file" .gz`
	    ;;

	*.Z)
	    gunzip -c "$file" > `basename "$file" .Z`
	    ;;

	*.bz2)
	    bunzip2  -c "$file" > `basename "$file" .bz2`
	    ;;

        *.rpm)
            dir="`basename "$file" .rpm`"
	    mkdir -p "$dir" || die "Could not create $dir"
	    (
		cd "$dir" || die "Could not cd to $dir"
		rpm2cpio "$file" | cpio -dim
	    )
	    ;;

        *.deb)
            dir="`basename "$file" .deb`"
	    mkdir -p "$dir" || die "Could not create $dir"
	    (
		cd "$dir" || die "Could not cd to $dir"
		ar -x "$file"
		[ -f control.tar.gz ] && gunzip -c  control.tar.gz | tar xvp
		[ -f data.tar.gz ] && gunzip -c  data.tar.gz | tar xvp
	    )
	    ;;
    esac
done

This script appeared in the December 2003 issue of SysAdmin magazine and online at UnixReview.com.


Download: unpack