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."
}
|