@@ -28,9 +28,13 @@ End-Of-Usage
2828 done
2929 shift $(( OPTIND - 1 ))
3030
31- [ $# -eq 0 ] && extract -h && return 1
32- while [ $# -gt 0 ]; do
33- if [[ ! -f " $1 " ]]; then
31+ if [[ $# -eq 0 ]]; then
32+ extract -h
33+ return 1
34+ fi
35+
36+ while [[ $# -gt 0 ]]; do
37+ if [[ ! -f " ${1:- } " ]]; then
3438 echo " extract: '$1 ' is not a valid file" >&2
3539 shift
3640 continue
@@ -39,23 +43,23 @@ End-Of-Usage
3943 local -r filename=$( basename -- " $1 " )
4044 local -r filedirname=$( dirname -- " $1 " )
4145 local targetdirname
42- # shellcheck disable=SC2001
46+ # shellcheck disable=SC2001 # we don't depend on `extglob`...
4347 targetdirname=$( sed ' s/\(\.tar\.bz2$\|\.tbz$\|\.tbz2$\|\.tar\.gz$\|\.tgz$\|\.tar$\|\.tar\.xz$\|\.txz$\|\.tar\.Z$\|\.7z$\|\.nupkg$\|\.zip$\|\.war$\|\.jar$\)//g' <<< " $filename" )
44- if [ " $filename " = " $targetdirname " ]; then
48+ if [[ " $filename " == " $targetdirname " ] ]; then
4549 # archive type either not supported or it doesn't need dir creation
4650 targetdirname=" "
4751 else
4852 mkdir -v " $filedirname /$targetdirname "
4953 fi
5054
51- if [ -f " $1 " ]; then
55+ if [[ -f " $1 " ] ]; then
5256 case " $1 " in
5357 * .tar.bz2 | * .tbz | * .tbz2) tar " x${verbose} jf" " $1 " -C " $filedirname /$targetdirname " ;;
5458 * .tar.gz | * .tgz) tar " x${verbose} zf" " $1 " -C " $filedirname /$targetdirname " ;;
5559 * .tar.xz | * .txz) tar " x${verbose} Jf" " $1 " -C " $filedirname /$targetdirname " ;;
5660 * .tar.Z) tar " x${verbose} Zf" " $1 " -C " $filedirname /$targetdirname " ;;
5761 * .bz2) bunzip2 " $1 " ;;
58- * .deb) dpkg-deb " -x ${verbose} " " $1 " " ${1: 0:- 4} " ;;
62+ * .deb) dpkg-deb -x " ${verbose} " " $1 " " ${1: 0:- 4} " ;;
5963 * .pax.gz)
6064 gunzip " $1 "
6165 set -- " $@ " " ${1: 0:- 3} "
@@ -64,7 +68,7 @@ End-Of-Usage
6468 * .pax) pax -r -f " $1 " ;;
6569 * .pkg) pkgutil --expand " $1 " " ${1: 0:- 4} " ;;
6670 * .rar) unrar x " $1 " ;;
67- * .rpm) rpm2cpio " $1 " | cpio " -idm${verbose} " ;;
71+ * .rpm) rpm2cpio " $1 " | cpio -idm" ${verbose} " ;;
6872 * .tar) tar " x${verbose} f" " $1 " -C " $filedirname /$targetdirname " ;;
6973 * .xz) xz --decompress " $1 " ;;
7074 * .zip | * .war | * .jar | * .nupkg) unzip " $1 " -d " $filedirname /$targetdirname " ;;
@@ -77,3 +81,6 @@ End-Of-Usage
7781 shift
7882 done
7983}
84+
85+ # Shorten extract
86+ alias xt=' extract'
0 commit comments