#!/bin/sh set -e # extracts a tarball's contents to the output directory. # if the tarball contains just one directory, extract those contents # # we can rewrite this script in c eventually, if we want if [ -z "$1" -o -z "$2" ]; then echo "Usage: $0 " >&2 exit 1 fi tarball="$1" target="$2" is_one_directory() { if [ $(echo $1 | wc -l) -ne 1 ]; then return 1 fi case "$1" in */) return 0 ;; *) return 1 ;; esac } # get top level paths in tarball tlps=$(tar -tf "$tarball" | grep -E '^(./)?[^/]+/?$') if is_one_directory "$tlps"; then # if only one top level directory, extract it and rename it tar xf "$tarball" mv "$tlps" "$target" else # if a bunch of files or directories, extract them in a directory mkdir $target tar xf "$tarball" -C "$target" fi