105 lines
2.5 KiB
Bash
105 lines
2.5 KiB
Bash
#!/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 "$@"
|