blob: d2ba15aae1cfe92b54fdf3ac14a802c3c65518e1 (
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
95
96
97
98
99
100
101
102
103
104
|
#!/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 0
fi
install_package p7zip
}
function check_and_install_unar_unrar() {
local unar_missing=0
local unrar_missing=0
command -v unar &>/dev/null || unar_missing=1
command -v unrar &>/dev/null || unrar_missing=1
case "$unar_missing$unrar_missing" in
00)
# both installed
return 0
;;
10)
# unar installed, unrar missing
install_package unrar && return 0
;;
01)
# unrar installed, unar missing
install_package unar && return 0
;;
11)
# both missing, try unar first, then unrar
install_package unar && return 0
install_package unrar && return 0
echo "Error: could not install either unar or unrar."
return 1
;;
esac
}
function extract_rar() {
if command -v unar &>/dev/null; then
unar "$1" -o "$2"
elif command -v unrar &>/dev/null; then
unrar x -o+ "$1" "$2"
else
echo "Error: neither unar nor unrar available to extract $1"
return 1
fi
}
function rar2zip() {
check_and_install_7z || {
echo "Failed to install 7z. Aborting."
exit 1
}
check_and_install_unar_unrar || {
echo "Failed to install unar or unrar. 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"
extract_rar "$OLDFILE" "$TEMPDIR/" || {
echo "Extraction failed for $OLDFILE"
rm -rf "$TEMPDIR"
continue
}
7z a -tzip -mx=9 "$NEWNAME" "${TEMPDIR}/*"
touch -r "$OLDFILE" "$NEWNAME"
rm -rf "$TEMPDIR"
gio trash "$OLDFILE" 2>/dev/null || rm -f "$OLDFILE"
echo "$OLDFILE: Original file moved to trash"
else
echo "$NEWNAME: File already exists!"
fi
done
echo "Conversion complete."
}
rar2zip "$@"
|