From 368bc11acfa0887e0ee0e50c9b255f2dd7e8633e Mon Sep 17 00:00:00 2001 From: fatalerrors Date: Thu, 5 Mar 2026 10:55:17 +0100 Subject: [PATCH] add many compression format to utaz --- profile.d/compress.sh | 109 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 106 insertions(+), 3 deletions(-) diff --git a/profile.d/compress.sh b/profile.d/compress.sh index 2756733..73c8300 100644 --- a/profile.d/compress.sh +++ b/profile.d/compress.sh @@ -78,6 +78,64 @@ utaz() fi } + _ununrar() + { + unrar x -o+ "$1" "$2/" >/dev/null 2>&1 + } + + _ununarj() + { + unarj e "$1" "$2/" >/dev/null 2>&1 + } + + _unlza() + { + # lha typically extracts into the current directory + # We ensure it hits the target directory + (cd "$2" && lha -x "../$1") >/dev/null 2>&1 + } + + _ununace() + { + unace x "$1" "$2/" >/dev/null 2>&1 + } + + _un7z() + { + 7z x "$1" -o"$2/" >/dev/null 2>&1 + } + + _unzstd() + { + # Zstd decompresses files directly, often requiring tar for archives + tar --zstd -xf "$1" -C "$2" + } + + _uncpio() + { + # CPIO requires careful directory handling + (cd "$2" && cpio -id < "../$1") >/dev/null 2>&1 + } + + _uncabextract() + { + # Requires 'cabextract' package + cabextract "$1" -d "$2/" >/dev/null 2>&1 + } + + _undeb() + { + # Extracts data content from a Debian package + dpkg-deb -x "$1" "$2/" >/dev/null 2>&1 + } + + _unrpm() + { + # Extracts CPIO-based payload from an RPM package + # Needs rpm2cpio and cpio + rpm2cpio "$1" | (cd "$2/" && cpio -idmv) >/dev/null 2>&1 + } + for opt in $@; do case ${opt} in "-h" | "--help") @@ -147,6 +205,36 @@ utaz() *.tar) extractor="_untar" ;; + *.rar) + extractor="_ununrar" + ;; + *.arj) + extractor="_ununarj" + ;; + *.lzh|*.lha) + extractor="_unlha" + ;; + *.ace) + extractor="_ununace" + ;; + *.7z) + extractor="_un7z" + ;; + *.zst) + extractor="_unzstd" + ;; + *.cpio) + extractor="_uncpio" + ;; + *.cab) + extractor="_uncabextract" + ;; + *.deb) + extractor="_undeb" + ;; + *.rpm) + extractor="_unrpm" + ;; *) disp I "File ${f} is not a supported archive, skipping." continue @@ -155,9 +243,24 @@ utaz() # Verify binary existence local cmd=${extractor//_un/} - command -v ${cmd} >/dev/null 2>&1 || { - disp E "Binary ${cmd} necessary to extract ${f} is missing." - continue + if [[ $cmd == "deb" ]]; then + command -v dpkg-deb >/dev/null 2>&1 || { + disp E "The program 'dpkg-deb' is not installed, aborting." + continue + } + elif [[ $cmd == "rpm" ]]; then + command -v rpm2cpio >/dev/null 2>&1 || { + disp E "The program 'rpm2cpio' is not installed, aborting." + continue + } + command -v cpio >/dev/null 2>&1 || { + disp E "The program 'cpio' is not installed, aborting." + continue + } + else + command -v ${cmd} >/dev/null 2>&1 || { + disp E "Binary ${cmd} necessary to extract ${f} is missing." + continue } disp I "Processing archive ${f} with ${extractor}..."