Files
q-tools/files/archive-extract2folder
2025-08-30 13:41:45 +03:00

72 lines
1.8 KiB
Bash
Executable File

#!/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"; ;;
*.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