/7zcat
https://bitbucket.org/essentialkaos/7zcat · #! · 211 lines · 178 code · 33 blank · 0 comment · 0 complexity · 1b0f2270884676ab0ddf6cd5ba9551fa MD5 · raw file
- #!/usr/bin/env bash
- APP="7zcat"
- VER="1.0.3"
- NORM=0
- BOLD=1
- UNLN=4
- RED=31
- GREEN=32
- BROWN=33
- BLUE=34
- MAG=35
- CYAN=36
- GREY=37
- CL_NORM="\e[${NORM}m"
- CL_BOLD="\e[${BOLD}m"
- CL_UNLN="\e[${UNLN}m"
- CL_RED="\e[${RED}m"
- CL_GREEN="\e[${GREEN}m"
- CL_BROWN="\e[${BROWN}m"
- CL_BLUE="\e[${BLUE}m"
- CL_MAG="\e[${MAG}m"
- CL_CYAN="\e[${CYAN}m"
- CL_GREY="\e[${GREY}m"
- CL_BL_RED="\e[${RED};1m"
- CL_BL_GREEN="\e[${GREEN};1m"
- CL_BL_BROWN="\e[${BROWN};1m"
- CL_BL_BLUE="\e[${BLUE};1m"
- CL_BL_MAG="\e[${MAG};1m"
- CL_BL_CYAN="\e[${CYAN};1m"
- CL_BL_GREY="\e[${GREY};1m"
- CL_UL_RED="\e[${RED};4m"
- CL_UL_GREEN="\e[${GREEN};4m"
- CL_UL_BROWN="\e[${BROWN};4m"
- CL_UL_BLUE="\e[${BLUE};4m"
- CL_UL_MAG="\e[${MAG};4m"
- CL_UL_CYAN="\e[${CYAN};4m"
- CL_UL_GREY="\e[${GREY};4m"
- CL_BG_RED="\e[${RED};7m"
- CL_BG_GREEN="\e[${GREEN};7m"
- CL_BG_BROWN="\e[${BROWN};7m"
- CL_BG_BLUE="\e[${BLUE};7m"
- CL_BG_MAG="\e[${MAG};7m"
- CL_BG_CYAN="\e[${CYAN};7m"
- CL_BG_GREY="\e[${GREY};7m"
- SUPPORTED_ARGS="pass password help usage version ver"
- SHORT_ARGS="p:password h:help v:version"
- main() {
- if [[ ! `type -P 7za` ]] ; then
- echo "Error! 7zip not installed."
- exit 1
- fi
- if [[ $ver || $version ]] ; then
- about
- exit 0
- fi
- if [[ $help || $usage || $# -eq 0 ]] ; then
- usage
- exit 0
- fi
- [[ $pass ]] && password="$pass"
- for file in $@ ; do
- [[ "${file:0:1}" == "-" ]] && continue
- [[ -n "$password" && "$file" == "$password" ]] && continue
- if [[ ! -f $file ]] ; then
- show "Error! $file is not a file." $RED
- continue
- elif [[ ! -r $file ]]; then
- show "Error! $file is not readable." $RED
- continue
- fi
- if [[ $password ]] ; then
- 7za e -p${password} -so -bd $file 2> /dev/null
- else
- 7za e -so -bd $file 2> /dev/null
- fi
- done
- }
- show() {
- if [[ $2 ]] ; then
- echo -e "\e["$2"m"$1"${CL_NORM}"
- else
- echo -e "$@"
- fi
- }
- usage() {
- show "${CL_BOLD}Usage:${CL_NORM} 7zcat <file>..."
- show ""
- show "${CL_BOLD}Options:${CL_NORM}"
- show " --password <pass> Use password for unpacking archives"
- show " --help Show this help message"
- show " --version Show information about version"
- show ""
- }
- about() {
- show "${CL_BL_CYAN}$APP${CL_NORM} ${CL_CYAN}$VER${CL_NORM} - Utility for output data in 7z archive to stdout"
- show ""
- show "Copyright (C) 2009-2012 Essential Kaos LLC" $BOLD
- show "This utility is licenced under the terms of MIT license." $BOLD
- }
- showArgWarn() {
- show "Unknown argument --$1." $RED
- exit 1
- }
- # ARGUMENTS PARSING ######################################################################
- unset argv
- unset argn
- argv="$@"
- while [[ -n "$1" ]] ; do
- if [[ $1 =~ ' ' ]] ; then
- if [[ $argn ]] ; then
- declare $argn="$1"
- unset argn
- fi
- elif [[ $1 =~ ^-{1}[a-zA-Z]{1,2}+.*$ ]] ; then
- argm=${1:1}
- if [[ " $SHORT_ARGS " =~ \ ${argm}:([a-z_]*) ]] ; then
- arg="${BASH_REMATCH[1]}"
- else
- showArgWarn "-${argm}" 2> /dev/null || :
- shift
- continue
- fi
- if [[ ! $argn ]] ; then
- argn=$arg
- else
- declare $argn=true
- unset argn
- argn=$arg
- fi
-
- if [[ ! "$SUPPORTED_ARGS " =~ "$argn " ]] ; then
- showArgWarn "--${argn//_/-}" 2> /dev/null || :
- shift
- continue
- fi
- elif [[ $1 =~ ^-{2}[a-z]{1}[a-z0-9_-]+.*$ ]] ; then
- arg=${1:2}
- if [[ $arg == *=* ]] ; then
- oldIFS=$IFS ; IFS="="
- arg=($arg)
- IFS=$oldIFS
- unset oldIFS
-
- argm="${arg[0]}"
- argm=${argm//-/_}
-
- if [[ ! "$SUPPORTED_ARGS " =~ "${arg[0]} " ]] ; then
- showArgWarn "--${arg[0]//_/-}" 2> /dev/null || :
- shift
- continue
- fi
-
- declare ${argm}=${arg[1]}
-
- unset argm
-
- shift
- continue
- else
- arg=${arg//-/_}
-
- if [[ ! $argn ]] ; then
- argn=$arg
- else
- declare $argn=true
- unset argn
- argn=$arg
- fi
-
- if [[ ! "$SUPPORTED_ARGS " =~ "$argn " ]] ; then
- showArgWarn "--${argn//_/-}" 2> /dev/null || :
- shift
- continue
- fi
- fi
- else
- if [[ $argn ]] ; then
- declare $argn="$1"
- unset argn
- fi
- fi
- shift
- done
- [[ $argn ]] && declare $argn=true
- unset argn argm arg
- main $argv