add many compression format to utaz
This commit is contained in:
@@ -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,9 +243,24 @@ utaz()
|
|||||||
|
|
||||||
# Verify binary existence
|
# Verify binary existence
|
||||||
local cmd=${extractor//_un/}
|
local cmd=${extractor//_un/}
|
||||||
command -v ${cmd} >/dev/null 2>&1 || {
|
if [[ $cmd == "deb" ]]; then
|
||||||
disp E "Binary ${cmd} necessary to extract ${f} is missing."
|
command -v dpkg-deb >/dev/null 2>&1 || {
|
||||||
continue
|
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}..."
|
disp I "Processing archive ${f} with ${extractor}..."
|
||||||
|
|||||||
Reference in New Issue
Block a user