Ticket #3290: uniunpack.sh

File uniunpack.sh, 1.2 KB (added by birdie, 5 years ago)
Line 
1#! /bin/sh
2
3# Universal Unpacker by Artem S. Tashkinov <t.artem at mailcity dot com>
4# v1.4.0 Oct 18 15:35 2014: total rewrite; proper gzip support; no command output :(
5# v1.4.1 Oct 26 13:20 2014: file extension normalized
6# v1.4.2 Nov 4  04:29 2014: use RAR by default, use -r- for RAR, BASH->SH
7
8test -z "$1" && echo "Need an archive name to proceed" && exit 1
9test ! -e "$1" && echo "File '$1' doesn't exist" && exit 1
10
11lower=$(echo "$1" | tr A-Z a-z)
12
13case "$lower" in
14        *.tar|*.tbz|*.txz|*.tgz|*.tar.bz2|*.tar.gz|*.tar.xz|*.tar.lz)
15                tar xf "$1"
16                ;;
17        *.rar)
18                RAR=rar
19                rar --help >/dev/null 2>&1 || RAR=unrar
20                $RAR x -r- "$1"
21                ;;
22        *.7z)
23                7z x "$1"
24                ;;
25        *.bz2)
26                bzip2 -kd "$1"
27                ;;
28        *.gz)
29                newfile=$(echo "$1" | sed 's/\.gz$//')
30                test -e "$newfile" && echo "'$newfile' already exists. Not overwriting." || gzip -cd -- "$1" > "$newfile"
31                touch -r "$1" "$newfile" # let's preserve a timestamp
32                ;;
33        *.xz)
34                xz -dk "$1"
35                ;;
36        *.zip)
37                unzip "$1"
38                ;;
39        *.cpio)
40                cpio -i -m -d -F "$1"
41                ;;
42        *)
43                echo "The archive type for '$1' is unknown"
44                echo -n "Would you like to try unpacking the archive using 7z (y/n)? "
45                read answer
46                test "$answer" = "Y" -o "$answer" = "y" && 7z x "$1"
47                ;;
48esac
49
50res=$?
51test "$res" -ne 0 && echo "WARNING: Unpacking failed!"
52exit "$res"