diff --git a/bin/archive-extract b/bin/archive-extract new file mode 120000 index 0000000..ecbc441 --- /dev/null +++ b/bin/archive-extract @@ -0,0 +1 @@ +archive-extract2folder \ No newline at end of file diff --git a/files/archive-extract2folder b/files/archive-extract2folder index 85f21e4..c56276b 100755 --- a/files/archive-extract2folder +++ b/files/archive-extract2folder @@ -1,8 +1,36 @@ #!/bin/bash set -e +set -x + +_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"; ;; @@ -12,18 +40,32 @@ for arch in "$@"; do *.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 [[ -z "$FORCE_EXTRACT" ]]; then + if [[ "$ASK" == 1 ]]; then echo "extract $arch to $PWD/$D/?" read foo else echo "extracting $arch to $PWD/$D/" fi - mkdir -p "$D" - archive=$( realpath "$arch" ) - pushd "$D" - $U "$archive" - popd + + if [[ "$self" = "archive-extract2folder" ]]; then + mkdir -p "$D" + pushd "$D" + $U "$archive" + popd + fi + if [[ "$self" = "archive-extract" ]]; then + $U "$archive" + fi done -sleep 1