#!/bin/bash set -e _help() { echo 'Usage: archive-extract2folder [--ask] [arch1] [arch2] ... Extracts archives (tar/tgz/tar.Z/zip/rar) to folder arch1/ creating an extra folder level archive-extract [--ask] [arch1] [arch2] ... Extracts archives (tar/tgz/tar.Z/zip/rar) to the current folder Arguments: --ask Ask before extracting ' exit } ASK=0 [[ -z "$1" ]] && _help for (( i=1; i<=$#; i++ )); do [[ ${!i} = "-h" ]] && _help [[ ${!i} = "--help" ]] && _help [[ ${!i} = "--ask" ]] && ASK=1 done self=$( basename $0 ) for arch in "$@"; do if [[ ! -e "$arch" ]]; then continue fi case "$arch" in *.tar) D="`basename "$arch" .tar`"; U="tar -x -v -f"; ;; *.tar.gz) D="`basename "$arch" .tar.gz`"; U="tar -x -z -v -f"; ;; *.tgz) D="`basename "$arch" .tgz`"; U="tar -x -z -v -f"; ;; *.tar.Z) D="`basename "$arch" .tar.Z`"; U="tar -x -Z -v -f"; ;; *.tar.z) D="`basename "$arch" .tar.z`"; U="tar -x -Z -v -f"; ;; *.tar.bz2) D="`basename "$arch" .tar.bz2`"; U="tar -x -j -v -f"; ;; *.zip) D="`basename "$arch" .zip`"; U="unzip"; ;; *.rar) D="`basename "$arch" .rar`"; U="unrar x"; ;; *) echo "Cannot extract file $arch" ;; esac archive=$( realpath "$arch" ) if [[ "$self" = "archive-extract2folder" ]]; then out_folder="$PWD/$D/" fi if [[ "$self" = "archive-extract" ]]; then out_folder="$PWD/" fi if [[ "$ASK" == 1 ]]; then echo "extract $arch to $PWD/$D/?" read foo else echo "extracting $arch to $PWD/$D/" fi if [[ "$self" = "archive-extract2folder" ]]; then mkdir -p "$D" pushd "$D" $U "$archive" popd fi if [[ "$self" = "archive-extract" ]]; then $U "$archive" fi done