- #!/bin/bash
- #Desc: merge files from a given dir,files should start with ${_BASE_NAME}
- #Usage: mergeFile -D[-d] [-c] -[-m]
- _YESTERDAY=`date -d yesterday +"%Y%m%d"`
- _WORK_D=""
- _DEFAULT_DIR="${_WORK_D}${_YESTERDAY}"
- _BACKUP_DIR="${_WORK_D}"`date -d yesterday +"%Y%m"`
- _BASE_NAME=""
- _FULL_NAME="${_BASE_NAME}.${_YESTERDAY}"
- _HEADER='date +"%F %T"'
- _LOG_TMP=''
- ###func###
- #echo strings in a more confertable way
- print(){
- string=$1
- echo "`eval ${_HEADER}` ${string} "
- }
- #help
- #print help info
- help() {
- cat <<EOF
- -d mandetory,conflict with [-D] option,specify the dir that hold the files to be merged.
- -D mandetory,conflict with [-d] option,use the default dir,
- -c optional,compress the file mergeed.
- -m optional,move the file mergeed to backup dir,and the dir given(or default dir) will be delete.
- -h print this info.
- EOF
- }
- #error_handler
- #exit function for the script
- error_handler(){
- error_code=$1
- error_detail=$2
- level=$3
- print "error_code: ${error_code}"
- print "error_detail: ${error_detail}"
- if [[ ${level} -gt 3 ]];then
- pmail "${error_detail}" "${_LOG_TMP}"
- print "Sended excution log to Admin."
- fi
- if [[ ${level} -eq 2 ]];then
- print "Serious error,excution will be abord."
- exit ${quit_or_not}
- fi
- }
- #targz
- #use tar -czvf to compress a file
- targz(){
- file=$1
- dir=`pwd`
- cd `dirname ${file}`
- print "Compressing file:${file}"
- tar -czvf `basename ${file}`.tar.gz `basename ${file}` > /dev/null
- rm -rf `basename ${file}`
- print 'done.'
- cd ${dir}
- }
- #merge_file
- #pass in a dirname
- merge_file(){
- dir=$1
- _pwd=`pwd`
- cd ${dir}
- print "Creating file:${_FULL_NAME}"
- touch ${_FULL_NAME}
- count=`ls ${_BASE_NAME}*.txt|wc -l`
- if [[ ${count} -gt 0 ]];then
- ls ${_BASE_NAME}*.txt|while read file
- do
- if [[ "${file}" != "EOF" ]];then
- print "Hanlering file:${file}"
- cat ${file} >> ${_FULL_NAME}
- rm -rf ${file}
- fi
- done
- print "File created."
- if [[ ${_COMPRESS} ]];then
- targz "${_FULL_NAME}"
- fi
- if [[ ${_MOVE_TO_BACKUP_DIR} ]];then
- mv "${_FULL_NAME}.tar.gz" ${_BACKUP_DIR}
- if [[ $? -eq 0 ]];then
- export _DELETE_DIR=true
- fi
- fi
- else
- print "There is no required file in dir:${_DIR}"
- error_handler "002" "no_required_file" 2
- fi
- cd ${_pwd}
- }
- ###Main###
- #parsing args
- while getopts "d:cmD" arg
- do
- case ${arg} in
- d)
- export _DIR="${OPTARG}"
- export _USE_DIR=true
- ;;
- c)
- export _COMPRESS=true
- ;;
- m)
- export _MOVE_TO_BACKUP_DIR=true
- ;;
- D) export _USE_DEFAULT=true
- ;;
- h) help
- exit 0
- ;;
- ?)
- error_handler 001 "param_error" 2
- ;;
- esac
- done
- print "MergeFile start..."
- if [[ ${_USE_DIR} ]];then
- print "Using dir:${_DIR}"
- if [[ -d ${_DIR} ]];then
- name=`basename ${_DIR}`
- export _FULL_NAME=${_BASE_NAME}.${name}
- export _BACKUP_DIR=${_WORK_D}${name:0:6}
- #Create backup dir if not exists.
- if [[ ! -d ${_BACKUP_DIR} ]];then
- mkdir -p ${_BACKUP_DIR}
- fi
- merge_file ${_DIR}
- if [[ ${_DELETE_DIR} ]];then
- print "Deleting dir:${_DIR}"
- rm -rf ${_DIR}
- fi
- else
- print "DIR not exists,pls check."
- error_handler "003" "dir_not_exists." 2
- fi
- elif [[ ${_USE_DEFAULT} ]];then
- print "USing Default dir:${_DEFAULT_DIR}"
- #Create backup dir if not exists.
- if [[ ! -d ${_BACKUP_DIR} ]];then
- mkdir -p ${_BACKUP_DIR}
- fi
- if [[ -d ${_DEFAULT_DIR} ]];then
- merge_file ${_DEFAULT_DIR}
- if [[ ${_DELETE_DIR} ]];then
- print "Deleting dir:${_DEFAULT_DIR}"
- rm -rf ${_DEFAULT_DIR}
- fi
- else
- print "Default dir not exists,pls check."
- error_handler "004" "default_dir_not_exists" 3
- fi
- else
- error_handler 005 "param_error" 2
- fi
- #该片段来自于http://www.codesnippet.cn/detail/060620149739.html
来源: http://www.codesnippet.cn/detail/060620149739.html