#!/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." }