Created
July 19, 2015 07:59
-
-
Save Ranthrall/00db946d04b2da382900 to your computer and use it in GitHub Desktop.
Bash universal file extractor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # Default extraction target CWD | |
| exdir="." | |
| _unzip() { | |
| unzip "$1" -d "$exdir" | |
| } | |
| while [ -n "$1" ]; do | |
| case "$1" in | |
| "-h") | |
| echo "Usage: unpack [-D dir] [files] | |
| -D dir Set output directory | |
| files Files to extract/decompress" | |
| exit 0 | |
| ;; | |
| "-D") | |
| shift | |
| # ignore checks | |
| # [ -d "$1" -a -w "$1" ] && exdir="$1" | |
| # `readlink' important when $exdir compared with `pwd' | |
| exdir="`readlink -f \"$1\"`" | |
| ;; | |
| -*) | |
| # switches | |
| ;; | |
| *) | |
| break | |
| ;; | |
| esac | |
| shift | |
| done | |
| while [ -n "$1" ]; do | |
| bfn="${1##*/}" # base file name | |
| fn="${bfn%.*}" # without extension | |
| exfn="${exdir}/${fn}" # base file in output dir | |
| lcbfn=`echo "${1##*/}" | tr "[:upper:]" "[:lower:]"`; # lower case base file name | |
| apn=`readlink -f "$1"` # absolute path name | |
| case "$lcbfn" in | |
| *.tar) | |
| tar -C "$exdir" -xvf "$1";; | |
| *.tgz|*.tar.gz|*.dsl) | |
| tar -C "$exdir" -xvzf "$1";; | |
| *.tbz2|*.tar.bz2|*.tbz) | |
| tar -C "$exdir" -xvjf "$1";; | |
| *.tar.z|*.taz) | |
| tar -C "$exdir" -xvZf "$1";; | |
| *.z) | |
| if [ "`pwd`" = "$exdir" ]; then | |
| uncompress "$1" | |
| else | |
| uncompress -c "$1" > "${exfn}" | |
| fi;; | |
| *.gz) | |
| if [ "`pwd`" = "$exdir" ]; then | |
| gunzip -dv "$1" | |
| else | |
| gunzip -dcv "$1" > "${exfn}" | |
| fi;; | |
| *.bz2) | |
| if [ "`pwd`" = "$exdir" ]; then | |
| bunzip2 -dv "$1" | |
| else | |
| bunzip2 -dcv "$1" > "${exfn}" | |
| fi;; | |
| *.arj) | |
| arj e "$1" "$exdir";; | |
| *.lzh|*.lha) | |
| lha -xvw="$exdir" "$1";; | |
| *.rar) | |
| unrar x "$1" "$exdir";; | |
| *.zip|*.wsz|*.xpi) | |
| _unzip "$1";; | |
| *.odt|*.ods) | |
| _unzip "$1";; | |
| *.docx|*.pptx|*.xlsx) | |
| _unzip "$1";; | |
| *.jar) | |
| if [ -x "`which jar`" ]; then | |
| jar -xvf "$1" | |
| else | |
| _unzip "$1" | |
| fi;; | |
| *.zoo) | |
| if cd "$exdir"; then | |
| zoo x "$apn" | |
| cd - | |
| fi;; | |
| *.deb) | |
| dpkg -X "$1" "$exdir";; | |
| *.rpm) | |
| if cd "$exdir"; then | |
| rpm2cpio "$apn" | cpio -vid | |
| cd - | |
| fi;; | |
| *.7z) | |
| 7zr x -o"$exdir" "$1";; | |
| *.cab|*.msi) | |
| cabextract -d "$exdir" "$1";; | |
| *.ace) | |
| if cd "$exdir"; then | |
| unace e "$apn" | |
| cd - | |
| fi;; | |
| *.ha) | |
| if cd "$exdir"; then | |
| ha xa "$apn" | |
| cd - | |
| fi;; | |
| *.alz) | |
| unalz -d "$exdir" "$1";; | |
| *.arc|*.ark) | |
| if cd "$exdir"; then | |
| nomarch "$apn" | |
| cd - | |
| fi;; | |
| #*.uha | |
| # dosemu uharcd.exe x -t"$exdir" "$1";; | |
| #*.dar | |
| # true;; | |
| *.a|*.ar) | |
| ar xo "$1";; | |
| *.iso) | |
| exdir="$exdir" unpack-iso "$1";; | |
| thumbs.db|ehthumbs.db|thumbcache_*.db) | |
| vinetto -o "$exdir" "$1";; | |
| *) | |
| mime="`file -i "$1"`" | |
| case "$mime" in | |
| "application/x-zip") | |
| _unzip "$1";; | |
| *) | |
| echo "unpack: Unknown compression type." >&2 | |
| file -k "$1" >&2;; | |
| esac;; | |
| esac | |
| shift | |
| done | |
| exit $? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment