/7zcat

https://bitbucket.org/essentialkaos/7zcat · #! · 211 lines · 178 code · 33 blank · 0 comment · 0 complexity · 1b0f2270884676ab0ddf6cd5ba9551fa MD5 · raw file

  1. #!/usr/bin/env bash
  2. APP="7zcat"
  3. VER="1.0.3"
  4. NORM=0
  5. BOLD=1
  6. UNLN=4
  7. RED=31
  8. GREEN=32
  9. BROWN=33
  10. BLUE=34
  11. MAG=35
  12. CYAN=36
  13. GREY=37
  14. CL_NORM="\e[${NORM}m"
  15. CL_BOLD="\e[${BOLD}m"
  16. CL_UNLN="\e[${UNLN}m"
  17. CL_RED="\e[${RED}m"
  18. CL_GREEN="\e[${GREEN}m"
  19. CL_BROWN="\e[${BROWN}m"
  20. CL_BLUE="\e[${BLUE}m"
  21. CL_MAG="\e[${MAG}m"
  22. CL_CYAN="\e[${CYAN}m"
  23. CL_GREY="\e[${GREY}m"
  24. CL_BL_RED="\e[${RED};1m"
  25. CL_BL_GREEN="\e[${GREEN};1m"
  26. CL_BL_BROWN="\e[${BROWN};1m"
  27. CL_BL_BLUE="\e[${BLUE};1m"
  28. CL_BL_MAG="\e[${MAG};1m"
  29. CL_BL_CYAN="\e[${CYAN};1m"
  30. CL_BL_GREY="\e[${GREY};1m"
  31. CL_UL_RED="\e[${RED};4m"
  32. CL_UL_GREEN="\e[${GREEN};4m"
  33. CL_UL_BROWN="\e[${BROWN};4m"
  34. CL_UL_BLUE="\e[${BLUE};4m"
  35. CL_UL_MAG="\e[${MAG};4m"
  36. CL_UL_CYAN="\e[${CYAN};4m"
  37. CL_UL_GREY="\e[${GREY};4m"
  38. CL_BG_RED="\e[${RED};7m"
  39. CL_BG_GREEN="\e[${GREEN};7m"
  40. CL_BG_BROWN="\e[${BROWN};7m"
  41. CL_BG_BLUE="\e[${BLUE};7m"
  42. CL_BG_MAG="\e[${MAG};7m"
  43. CL_BG_CYAN="\e[${CYAN};7m"
  44. CL_BG_GREY="\e[${GREY};7m"
  45. SUPPORTED_ARGS="pass password help usage version ver"
  46. SHORT_ARGS="p:password h:help v:version"
  47. main() {
  48. if [[ ! `type -P 7za` ]] ; then
  49. echo "Error! 7zip not installed."
  50. exit 1
  51. fi
  52. if [[ $ver || $version ]] ; then
  53. about
  54. exit 0
  55. fi
  56. if [[ $help || $usage || $# -eq 0 ]] ; then
  57. usage
  58. exit 0
  59. fi
  60. [[ $pass ]] && password="$pass"
  61. for file in $@ ; do
  62. [[ "${file:0:1}" == "-" ]] && continue
  63. [[ -n "$password" && "$file" == "$password" ]] && continue
  64. if [[ ! -f $file ]] ; then
  65. show "Error! $file is not a file." $RED
  66. continue
  67. elif [[ ! -r $file ]]; then
  68. show "Error! $file is not readable." $RED
  69. continue
  70. fi
  71. if [[ $password ]] ; then
  72. 7za e -p${password} -so -bd $file 2> /dev/null
  73. else
  74. 7za e -so -bd $file 2> /dev/null
  75. fi
  76. done
  77. }
  78. show() {
  79. if [[ $2 ]] ; then
  80. echo -e "\e["$2"m"$1"${CL_NORM}"
  81. else
  82. echo -e "$@"
  83. fi
  84. }
  85. usage() {
  86. show "${CL_BOLD}Usage:${CL_NORM} 7zcat <file>..."
  87. show ""
  88. show "${CL_BOLD}Options:${CL_NORM}"
  89. show " --password <pass> Use password for unpacking archives"
  90. show " --help Show this help message"
  91. show " --version Show information about version"
  92. show ""
  93. }
  94. about() {
  95. show "${CL_BL_CYAN}$APP${CL_NORM} ${CL_CYAN}$VER${CL_NORM} - Utility for output data in 7z archive to stdout"
  96. show ""
  97. show "Copyright (C) 2009-2012 Essential Kaos LLC" $BOLD
  98. show "This utility is licenced under the terms of MIT license." $BOLD
  99. }
  100. showArgWarn() {
  101. show "Unknown argument --$1." $RED
  102. exit 1
  103. }
  104. # ARGUMENTS PARSING ######################################################################
  105. unset argv
  106. unset argn
  107. argv="$@"
  108. while [[ -n "$1" ]] ; do
  109. if [[ $1 =~ ' ' ]] ; then
  110. if [[ $argn ]] ; then
  111. declare $argn="$1"
  112. unset argn
  113. fi
  114. elif [[ $1 =~ ^-{1}[a-zA-Z]{1,2}+.*$ ]] ; then
  115. argm=${1:1}
  116. if [[ " $SHORT_ARGS " =~ \ ${argm}:([a-z_]*) ]] ; then
  117. arg="${BASH_REMATCH[1]}"
  118. else
  119. showArgWarn "-${argm}" 2> /dev/null || :
  120. shift
  121. continue
  122. fi
  123. if [[ ! $argn ]] ; then
  124. argn=$arg
  125. else
  126. declare $argn=true
  127. unset argn
  128. argn=$arg
  129. fi
  130. if [[ ! "$SUPPORTED_ARGS " =~ "$argn " ]] ; then
  131. showArgWarn "--${argn//_/-}" 2> /dev/null || :
  132. shift
  133. continue
  134. fi
  135. elif [[ $1 =~ ^-{2}[a-z]{1}[a-z0-9_-]+.*$ ]] ; then
  136. arg=${1:2}
  137. if [[ $arg == *=* ]] ; then
  138. oldIFS=$IFS ; IFS="="
  139. arg=($arg)
  140. IFS=$oldIFS
  141. unset oldIFS
  142. argm="${arg[0]}"
  143. argm=${argm//-/_}
  144. if [[ ! "$SUPPORTED_ARGS " =~ "${arg[0]} " ]] ; then
  145. showArgWarn "--${arg[0]//_/-}" 2> /dev/null || :
  146. shift
  147. continue
  148. fi
  149. declare ${argm}=${arg[1]}
  150. unset argm
  151. shift
  152. continue
  153. else
  154. arg=${arg//-/_}
  155. if [[ ! $argn ]] ; then
  156. argn=$arg
  157. else
  158. declare $argn=true
  159. unset argn
  160. argn=$arg
  161. fi
  162. if [[ ! "$SUPPORTED_ARGS " =~ "$argn " ]] ; then
  163. showArgWarn "--${argn//_/-}" 2> /dev/null || :
  164. shift
  165. continue
  166. fi
  167. fi
  168. else
  169. if [[ $argn ]] ; then
  170. declare $argn="$1"
  171. unset argn
  172. fi
  173. fi
  174. shift
  175. done
  176. [[ $argn ]] && declare $argn=true
  177. unset argn argm arg
  178. main $argv