diff options
Diffstat (limited to '')
-rwxr-xr-x | misc/ext.d/archive.sh | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/misc/ext.d/archive.sh b/misc/ext.d/archive.sh new file mode 100755 index 0000000..840fd47 --- /dev/null +++ b/misc/ext.d/archive.sh @@ -0,0 +1,204 @@ +#!/bin/sh + +# $1 - action +# $2 - type of file +# $3 - pager + +action=$1 +filetype=$2 +pager=$3 + +[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open" + +do_view_action() { + filetype=$1 + + case "${filetype}" in + gz) + gzip -dc "${MC_EXT_FILENAME}" 2>/dev/null + ;; + bz2) + bzip2 -dc "${MC_EXT_FILENAME}" 2>/dev/null + ;; + bzip) + bzip2 -dc "${MC_EXT_FILENAME}" 2>/dev/null + ;; + lz) + lzip -dc "${MC_EXT_FILENAME}" 2>/dev/null + ;; + lz4) + lz4 -dc "${MC_EXT_FILENAME}" 2>/dev/null + ;; + lzma) + lzma -dc "${MC_EXT_FILENAME}" 2>/dev/null + ;; + xz) + xz -dc "${MC_EXT_FILENAME}" 2>/dev/null + ;; + zst) + zstd -dc "${MC_EXT_FILENAME}" 2>/dev/null + ;; + tar) + tar tvvf - < "${MC_EXT_FILENAME}" + ;; + tar.gz|tar.qpr) + gzip -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ + tar tvvf - + ;; + tar.bzip) + bzip -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ + tar tvvf - + ;; + tar.bzip2) + bzip2 -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ + tar tvvf - + ;; + tar.lz) + lzip -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ + tar tvvf - + ;; + tar.lz4) + lz4 -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ + tar tvvf - + ;; + tar.lzma) + lzma -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ + tar tvvf - + ;; + tar.xz) + xz -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ + tar tvvf - + ;; + tar.zst|tzst) + zstd -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ + tar tvvf - + ;; + tar.F) + freeze -dc "${MC_EXT_FILENAME}" 2>/dev/null | \ + tar tvvf - + ;; + + lha) + lha l "${MC_EXT_FILENAME}" 2>/dev/null || \ + jlha l "${MC_EXT_FILENAME}" 2>/dev/null || \ + lhasa l "${MC_EXT_FILENAME}" 2>/dev/null + ;; + arj) + arj l "${MC_EXT_FILENAME}" 2>/dev/null || \ + unarj l "${MC_EXT_FILENAME}" 2>/dev/null || \ + 7za l "${MC_EXT_FILENAME}" 2>/dev/null + ;; + cab) + cabextract -l "${MC_EXT_FILENAME}" 2> /dev/null || \ + 7za l "${MC_EXT_FILENAME}" 2>/dev/null + ;; + ha) + ha lf "${MC_EXT_FILENAME}" + ;; + rar) + rar v -c- "${MC_EXT_FILENAME}" 2>/dev/null || \ + unrar v -c- "${MC_EXT_FILENAME}" + ;; + alz) + unalz -l "${MC_EXT_FILENAME}" + ;; + cpio.z|cpio.gz) + gzip -dc "${MC_EXT_FILENAME}" | \ + cpio -itv 2>/dev/null + ;; + cpio.lz) + lzip -dc "${MC_EXT_FILENAME}" | \ + cpio -itv 2>/dev/null + ;; + cpio.lz4) + lz4 -dc "${MC_EXT_FILENAME}" | \ + cpio -itv 2>/dev/null + ;; + cpio.xz) + xz -dc "${MC_EXT_FILENAME}" | \ + cpio -itv 2>/dev/null + ;; + cpio.zst) + zstd -dc "${MC_EXT_FILENAME}" | \ + cpio -itv 2>/dev/null + ;; + cpio) + cpio -itv < "${MC_EXT_FILENAME}" 2>/dev/null + ;; + 7z) + 7za l "${MC_EXT_FILENAME}" 2>/dev/null || + 7z l "${MC_EXT_FILENAME}" + + ;; + ace) + unace l "${MC_EXT_FILENAME}" + ;; + arc) + arc l "${MC_EXT_FILENAME}" + ;; + zip) + unzip -v "${MC_EXT_FILENAME}" 2> /dev/null || \ + 7za l "${MC_EXT_FILENAME}" 2> /dev/null + ;; + zipx) + 7za l "${MC_EXT_FILENAME}" 2> /dev/null + ;; + zoo) + zoo l "${MC_EXT_FILENAME}" + ;; + wim) + wimlib-imagex info "${MC_EXT_FILENAME}" 2> /dev/null + ;; + *) + ;; + esac +} + +do_open_action() { + filetype=$1 + pager=$2 + + case "${filetype}" in + bzip2) + bzip2 -dc "${MC_EXT_FILENAME}" | ${pager} + ;; + bzip) + bzip -dc "${MC_EXT_FILENAME}" | ${pager} + ;; + gz) + gz -dc "${MC_EXT_FILENAME}" | ${pager} + ;; + lz) + lzip -dc "${MC_EXT_FILENAME}" | ${pager} + ;; + lz4) + lz4 -dc "${MC_EXT_FILENAME}" | ${pager} + ;; + lzma) + lzma -dc "${MC_EXT_FILENAME}" | ${pager} + ;; + xz) + xz -dc "${MC_EXT_FILENAME}" | ${pager} + ;; + zst) + zstd -dc "${MC_EXT_FILENAME}" | ${pager} + ;; + par2) + par2 r "${MC_EXT_FILENAME}" + ;; + *) + ;; + esac +} + +case "${action}" in +view) + do_view_action "${filetype}" + ;; +open) + ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \ + do_open_action "${filetype}" "${pager}" + ;; +*) + ;; +esac |