darkpoon 发表于 2018-8-27 09:32:10

shell 切割脚本

  #!/bin/bash
  #return error code
  #0: success
  #1: parameter error
  #6: custom.log file is empty
  #7: cutfile error
  #8: up log file success
  TAR_DIR_FILE_MAX=30
  MAIN_LOG_FILE_MAX=1024
  MAIN_LOG_NAME='custom.log'
  CUT_MAIN_LOG_FILE="custom_$(date +"%Y%m%d%H%M").log"
  function usage()
  {
  echo "Options:"
  echo "       -f: flg"
  echo "       -t: custom.log tar path"
  echo "       -l: custom.log path"
  echo "   -h: show help info"
  }
  function check_parameter()
  {
  test "x${LOG_FLG}-${TAR_PATH}-${MAIN_LOG_PATH}" = "x--" && echo "Error: argment is empty" && usage && exit 1
  test "x$LOG_FLG" != "x1" && echo "Error: -f flg argment error" && usage && exit 1
  test "x$TAR_PATH" = "x" && echo "Error: -t custom.log tar path" && usage && exit 1
  test "x$MAIN_LOG_PATH" = "x" && echo "Error: -l custom.log path" && usage && exit 1
  [ -f "$MAIN_LOG_PATH" ] && echo "Error: -l must is dir" && usage && exit 1
  [ -f "$TAR_PATH" ] && echo "Error: -t must is dir" && usage && exit 1
  }
  function touch_main_file()
  {
  touch "${MAIN_LOG_PATH}/${MAIN_LOG_NAME}"
  chmod 777 "${MAIN_LOG_PATH}/${MAIN_LOG_NAME}"
  }
  function rm_tar_file()
  {
  SUM_TAR_FILE=`ls ${TAR_PATH}/ |wc -l`
  if [ "$SUM_TAR_FILE" -gt "$TAR_DIR_FILE_MAX" ]; then
  `find ${TAR_PATH}/ -mtime +2|xargs rm -f`
  fi
  }
  while getopts :f:t:l: OPTION
  do
  case $OPTION in
  f)
  LOG_FLG=$OPTARG
  ;;
  t)
  TAR_PATH=$OPTARG
  ;;
  l)MAIN_LOG_PATH=$OPTARG
  ;;
  h)
  usage
  exit 0
  ;;
  \?)
  echo "-$OPTARG: invalid option"
  usage
  exit 1
  ;;
  :)
  echo "-$OPTARG: miss option argment"
  usage
  exit 1
  ;;
  esac
  done
  #### 检查参数
  check_parameter
  #### 切割
  [ ! -f "${MAIN_LOG_PATH}/${MAIN_LOG_NAME}" ] && touch_main_file
  [ ! -s "${MAIN_LOG_PATH}/${MAIN_LOG_NAME}" ] && echo "${MAIN_LOG_FILE}/${MAIN_LOG_NAME} file is empty" && exit 6
  mv ${MAIN_LOG_PATH}/${MAIN_LOG_NAME}   ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}
  test "x$?" != "x0" && echo "cut ${MAIN_LOG_PATH}/${MAIN_LOG_NAME} file error" && exit 7
  touch_main_file
  #### 打包
  tar cjfP${TAR_PATH}/${CUT_MAIN_LOG_FILE}.tar.bz2${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}
  #### 上报
  FILE_SIZE=`du ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}|awk '{print $1}'`
  [ "$FILE_SIZE" -gt "$MAIN_LOG_FILE_MAX" ] && UNIQ_FILE=`cat ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}|sort|uniq|head -50` || UNIQ_FILE=`cat ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}|sort|uniq`
  #### 删除
  rm -f ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}
  #### 删除tar目录下最旧的文件
  rm_tar_file
  echo -e "${FILE_SIZE}(k)\n${UNIQ_FILE}" && exit 8
  ======= php
  
页: [1]
查看完整版本: shell 切割脚本