added tar extract-directory creation and usage (also removal of unnecessary recursion where appropriate)

pull/1570/head
Ralph Gutmann 2020-04-21 18:11:15 +02:00
parent 70e0aa0dcd
commit ce160ff314
1 changed files with 27 additions and 13 deletions

View File

@ -5,7 +5,7 @@ about-plugin 'one command to extract them all...'
extract() { extract() {
local opt local opt
local OPTIND=1 local OPTIND=1
while getopts "hv" opt; do while getopts "hdv" opt; do
case "$opt" in case "$opt" in
h) h)
cat <<End-Of-Usage cat <<End-Of-Usage
@ -29,12 +29,28 @@ End-Of-Usage
[ $# -eq 0 ] && extract -h && return 1 [ $# -eq 0 ] && extract -h && return 1
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
if [ -f "$1" ]; then if [[ ! -f "$1" ]]; then
case "$1" in echo "extract: '$1' is not a valid file" >&2
*.tar.bz2|*.tbz|*.tbz2) tar "x${verbose}jf" "$1" ;; shift
*.tar.gz|*.tgz) tar "x${verbose}zf" "$1" ;; continue
*.tar.xz) xz --decompress "$1"; set -- "$@" "${1:0:-3}" ;; fi
*.tar.Z) uncompress "$1"; set -- "$@" "${1:0:-2}" ;;
local -r filename=$(basename -- $1)
local -r filedirname=$(dirname -- $1)
local targetdirname=$(sed 's/\(\.tar\.bz2$\|\.tbz$\|\.tbz2$\|\.tar\.gz$\|\.tgz$\|\.tar$\|\.tar\.xz$\|\.txz$\|\.tar\.Z$\|\.7z$\)//g' <<< $filename)
if [ "$filename" = "$targetdirname" ]; then
# archive type either not supported or it doesn't need dir creation
targetdirname=""
else
mkdir -v "$filedirname/$targetdirname"
fi
if [ -f "$1" ]; then
case "$1" in
*.tar.bz2|*.tbz|*.tbz2) tar "x${verbose}jf" "$1" -C "$filedirname/$targetdirname" ;;
*.tar.gz|*.tgz) tar "x${verbose}zf" "$1" -C "$filedirname/$targetdirname" ;;
*.tar.xz|*.txz) tar "x${verbose}Jf" "$1" -C "$filedirname/$targetdirname" ;;
*.tar.Z) tar "x${verbose}Zf" "$1" -C "$filedirname/$targetdirname" ;;
*.bz2) bunzip2 "$1" ;; *.bz2) bunzip2 "$1" ;;
*.deb) dpkg-deb -x${verbose} "$1" "${1:0:-4}" ;; *.deb) dpkg-deb -x${verbose} "$1" "${1:0:-4}" ;;
*.pax.gz) gunzip "$1"; set -- "$@" "${1:0:-3}" ;; *.pax.gz) gunzip "$1"; set -- "$@" "${1:0:-3}" ;;
@ -43,17 +59,15 @@ End-Of-Usage
*.pkg) pkgutil --expand "$1" "${1:0:-4}" ;; *.pkg) pkgutil --expand "$1" "${1:0:-4}" ;;
*.rar) unrar x "$1" ;; *.rar) unrar x "$1" ;;
*.rpm) rpm2cpio "$1" | cpio -idm${verbose} ;; *.rpm) rpm2cpio "$1" | cpio -idm${verbose} ;;
*.tar) tar "x${verbose}f" "$1" ;; *.tar) tar "x${verbose}f" "$1" -C "$filedirname/$targetdirname" ;;
*.txz) mv "$1" "${1:0:-4}.tar.xz"; set -- "$@" "${1:0:-4}.tar.xz" ;;
*.xz) xz --decompress "$1" ;; *.xz) xz --decompress "$1" ;;
*.zip|*.war|*.jar) unzip "$1" ;; *.zip|*.war|*.jar) unzip "$1" ;;
*.Z) uncompress "$1" ;; *.Z) uncompress "$1" ;;
*.7z) 7za x "$1" ;; *.7z) 7za x "$1" ;;
*) echo "'$1' cannot be extracted via extract" >&2;; *) echo "'$1' cannot be extracted via extract" >&2;;
esac esac
else fi
echo "extract: '$1' is not a valid file" >&2
fi
shift shift
done done
} }