Merge pull request #1570 from rgutmann/extract-tar-with-archive-directory
added tar extract-directory creation and usage
This commit is contained in:
@@ -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
|
||||||
|
echo "extract: '$1' is not a valid file" >&2
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
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
|
if [ -f "$1" ]; then
|
||||||
case "$1" in
|
case "$1" in
|
||||||
*.tar.bz2|*.tbz|*.tbz2) tar "x${verbose}jf" "$1" ;;
|
*.tar.bz2|*.tbz|*.tbz2) tar "x${verbose}jf" "$1" -C "$filedirname/$targetdirname" ;;
|
||||||
*.tar.gz|*.tgz) tar "x${verbose}zf" "$1" ;;
|
*.tar.gz|*.tgz) tar "x${verbose}zf" "$1" -C "$filedirname/$targetdirname" ;;
|
||||||
*.tar.xz) xz --decompress "$1"; set -- "$@" "${1:0:-3}" ;;
|
*.tar.xz|*.txz) tar "x${verbose}Jf" "$1" -C "$filedirname/$targetdirname" ;;
|
||||||
*.tar.Z) uncompress "$1"; set -- "$@" "${1:0:-2}" ;;
|
*.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
|
|
||||||
echo "extract: '$1' is not a valid file" >&2
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user