aboutsummaryrefslogtreecommitdiffstats
path: root/hyperterm/tools/rar2zip.sh
blob: 54ec926663304aec1c9df7f807a5dd8afa496545 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash
#
# rar2zip conversion script
#
# Usage: rar2zip file [file ...]
# Example: rar2zip file.rar

function check_and_install_7z() {
    if command -v 7z &>/dev/null; then
        return
    fi

    echo "7z not found. Attempting to install..."

    INSTALLER=""
    SUDO=""
    USER_CMD=$(command -v sudo || command -v doas)

    [[ "$(id -u)" -ne 0 ]] && SUDO="$USER_CMD"

    OS_ID=$(
        cat /etc/*release 2>/dev/null |
        tr '[:upper:]' '[:lower:]' |
        grep "^id=" | head -n1 | cut -d= -f2 | tr -d '"'
    )

    case "$OS_ID" in
        arch|manjaro|artix|hyperbola)
            INSTALLER="pacman -Sy --noconfirm p7zip"
            ;;
        debian|ubuntu|linuxmint|elementary|pop)
            INSTALLER="apt-get update && apt-get install -y p7zip-full"
            ;;
        fedora)
            INSTALLER="dnf install -y p7zip p7zip-plugins"
            ;;
        void)
            INSTALLER="xbps-install -Sy p7zip"
            ;;
        gentoo)
            INSTALLER="emerge app-arch/p7zip"
            ;;
        alpine)
            INSTALLER="apk add p7zip"
            ;;
        *)
            echo "Unsupported distro. Cannot install 7z automatically."
            return 1
            ;;
    esac

    if [ -n "$INSTALLER" ]; then
        echo "Installing 7z using: $SUDO $INSTALLER"
        $SUDO bash -c "$INSTALLER"
    fi
}

function rar2zip() {
    check_and_install_7z || {
        echo "Failed to install 7z. Aborting."
        exit 1
    }

    echo "Converting RAR files to ZIP..."

    WORKDIR="/dev/shm/"

    for INFILE in "$@"; do
        OLDFILE=$(realpath "${INFILE}")
        BASENAME=$(basename "${OLDFILE%.*}")
        DIRNAME=$(dirname "$OLDFILE")
        NEWNAME="${DIRNAME}/$BASENAME.zip"

        if [ ! -e "${NEWNAME}" ]; then
            TEMPDIR=$(mktemp -p "$WORKDIR" -d)

            echo "Extracting $OLDFILE"
            unar "$OLDFILE" -o "${TEMPDIR}/"

            7z a -tzip -mx=9 "$NEWNAME" "${TEMPDIR}/*"

            touch -r "$OLDFILE" "$NEWNAME"

            rm -r "$TEMPDIR"

            gio trash "$OLDFILE"
            echo "${OLDFILE}: Original file moved to trash"
        else
            echo "${NEWNAME}: File already exists!"
        fi
    done

    echo "Conversion complete."
}