| 1 | #!/bin/sh |
| 2 | |
| 3 | # A general, all-purpose extraction script. Not all extraction programs here |
| 4 | # are installed by LARBS automatically. |
| 5 | # |
| 6 | # Default behavior: Extract archive into new directory |
| 7 | # Behavior with `-c` option: Extract contents into current directory |
| 8 | |
| 9 | while getopts "hc" o; do case "${o}" in |
| 10 | c) extracthere="True" ;; |
| 11 | *) printf "Options:\\n -c: Extract archive into current directory rather than a new one.\\n" && exit 1 ;; |
| 12 | esac done |
| 13 | |
| 14 | if [ -z "$extracthere" ]; then |
| 15 | archive="$(readlink -f "$*")" && |
| 16 | directory="$(echo "$archive" | sed 's/\.[^\/.]*$//')" && |
| 17 | mkdir -p "$directory" && |
| 18 | cd "$directory" || exit 1 |
| 19 | else |
| 20 | archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)" 2>/dev/null)" |
| 21 | fi |
| 22 | |
| 23 | [ -z "$archive" ] && printf "Give archive to extract as argument.\\n" && exit 1 |
| 24 | |
| 25 | if [ -f "$archive" ] ; then |
| 26 | case "$archive" in |
| 27 | *.tar.bz2|*.tbz2) bsdtar -xf "$archive" ;; |
| 28 | *.tar.xz) bsdtar -xf "$archive" ;; |
| 29 | *.tar.gz|*.tgz) bsdtar -xf "$archive" ;; |
| 30 | *.tar.zst) bsdtar -xf "$archive" ;; |
| 31 | *.tar) bsdtar -xf "$archive" ;; |
| 32 | *.lzma) unlzma "$archive" ;; |
| 33 | *.bz2) bunzip2 "$archive" ;; |
| 34 | *.rar) unrar x -ad "$archive" ;; |
| 35 | *.gz) gunzip "$archive" ;; |
| 36 | *.zip) unzip "$archive" ;; |
| 37 | *.Z) uncompress "$archive" ;; |
| 38 | *.7z) 7z x "$archive" ;; |
| 39 | *.xz) unxz "$archive" ;; |
| 40 | *.exe) cabextract "$archive" ;; |
| 41 | *) printf "extract: '%s' - unknown archive method\\n" "$archive" ;; |
| 42 | esac |
| 43 | else |
| 44 | printf "File \"%s\" not found.\\n" "$archive" |
| 45 | fi |