peekzip

#!/bin/bash

##################################################################
# file name: peekzip                                             #
# see matched patterns in zip/jar/war or any zip compatible file #
##################################################################


ME=`basename $0`

showHelp()
{
  echo "usage $ME -h"
  echo "usage $ME [-i] [-c] [-n] [-d depth] text_pattern [suffix1] [...]"
  echo "usage $ME [-i] [-c] [-n] [-d depth] -f zip_file text_pattern"
  echo "-h: show help"
  echo "-i: ingore case"
  echo "-c: show command"
  echo "-n: show line number"
  echo "-d: search depth"
  echo "-f: zip compatible file name"
  echo "The file suffix is case insensitive"
}


DEFAULT_SUFFIX="zip jar war ear"
WORK_DIR=/tmp
TMP_FILE=$WORK_DIR/$ME.$$

INVALID=1
IGNORE_CASE=1
SHOW_COMMAND=1
NUMBER=1
FILE=1
DEPTH=1

# check arguments
while getopts :icnhf:d: OPTION
do
  case $OPTION in
    i) IGNORE_CASE=0
       ;;
    c) SHOW_COMMAND=0
       ;;
    n) NUMBER=0
       ;;
    d) DEPTH=0
       MAX_DEPTH=$OPTARG
       ;;
    f) FILE=0
       FILE_NAME=$OPTARG
       ;;
    h) showHelp
       exit 0
       ;; 
    *) INVALID=0
       ;;
  esac
done

[ $INVALID -eq 0 ] && showHelp && exit 1

# assigned file name
[ $FILE -eq 0 ] && [ -z "$FILE_NAME" ] && showHelp && exit 1
shift `expr $OPTIND - 1`

PATTERN=$1
shift
SUFFIX=$*

[ -z "$PATTERN" ] && showHelp && exit 1

#echo "PATTERN=$PATTERN"
#echo "SUFFIX=$SUFFIX"
#echo "FILE_NAME=$FILE_NAME"
#echo "MAX_DEPTH=$MAX_DEPTH"

# set arguments
[ $IGNORE_CASE -eq 0 ] && IGNORE_CASE_ARG=" -i "
[ $NUMBER -eq 0 ] && NUMBER_ARG=" -n "
[ $DEPTH -eq 0 ] && MAX_DEPTH_ARG=" -maxdepth $MAX_DEPTH "

if [ $FILE -eq 0 ]
then
  FILE_NAME_ARG=" -name /"$FILE_NAME/" "
else
  # reset suffix if no suffix was specified
  [ -z "$SUFFIX" ] && SUFFIX=$DEFAULT_SUFFIX
 
  for VAR in $SUFFIX
  do
    S=$S"/|"$VAR
  done
 
  SUFFIX_PATTERN=`echo $S | sed 's///|//'`
  FILE_NAME_ARG=" -iregex /".+/./($SUFFIX_PATTERN/)/" "
fi

FINDCMD="find . $MAX_DEPTH_ARG -type f $FILE_NAME_ARG 2>/dev/null $SUFFIX_ARG"
[ $SHOW_COMMAND -eq 0 ] && echo $FINDCMD

ZIP_FILES=`eval $FINDCMD`
for VAR in $ZIP_FILES
do
  CMD="unzip -l $VAR 2>/dev/null | grep $IGNORE_CASE_ARG -E $PATTERN > $TMP_FILE"
  [ $SHOW_COMMAND -eq 0 ] && echo $CMD
  eval $CMD
  [ ! -f $TMP_FILE ] && echo "Failed to create temp file $TMP_FILE!" && exit 1
 
  WORD_COUNT=`wc -w $TMP_FILE | awk '{print$1}'`
  if [ $WORD_COUNT -gt 0 ]
  then
    # got matched lines
    echo -e "/033[;33;1m"       # highlight the title line as bold yellow
    echo "-------------------------------$VAR-------------------------------"
    echo -e "/033[;0m/c"       # rest font color
    cat $NUMBER_ARG $TMP_FILE
    /bin/rm -rf $TMP_FILE
  fi
done

exit 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值