add many compression format to utaz
This commit is contained in:
@@ -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}..."
|
||||
|
||||
Reference in New Issue
Block a user