add many compression format to utaz

This commit is contained in:
fatalerrors
2026-03-05 10:55:17 +01:00
parent a068d57ba5
commit 368bc11acf

View File

@@ -78,6 +78,64 @@ utaz()
fi 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 for opt in $@; do
case ${opt} in case ${opt} in
"-h" | "--help") "-h" | "--help")
@@ -147,6 +205,36 @@ utaz()
*.tar) *.tar)
extractor="_untar" 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." disp I "File ${f} is not a supported archive, skipping."
continue continue
@@ -155,6 +243,21 @@ utaz()
# Verify binary existence # Verify binary existence
local cmd=${extractor//_un/} local cmd=${extractor//_un/}
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 || { command -v ${cmd} >/dev/null 2>&1 || {
disp E "Binary ${cmd} necessary to extract ${f} is missing." disp E "Binary ${cmd} necessary to extract ${f} is missing."
continue continue