进入Linux终端,键入vim timePackLogs.sh(脚本名称)创建脚本并编辑如下脚本代码:

    1. #!/bin/bash
    2. #author:chen
    3. #date:20200821
    4. #department:xxxx
    5. #email:xxxx@xxxx.com
    6. #if you have any questions, please contact the email!
    7. echo `date '+%Y-%m-%d %H:%M:%S'`" 打包程序执行开始!";
    8. echo "开始打包从7天前截止昨天的日志(如本周日打包上周日到上周六的日志)!";
    9. #筛选打包日志文件的起始日期
    10. sevenDaysAgoDate=`date -d "7 days ago" +%Y-%m-%d`
    11. #筛选打包日志文件的截止日期(此处为获取当前日期)
    12. currentDate=`date +%Y-%m-%d`
    13. #起始日期时间戳(作为日期范围对比使用)
    14. sevenTimeStamp=`date -d "$sevenDaysAgoDate" +%s`
    15. #截至日期时间戳
    16. currentTimeStamp=`date -d "$currentDate" +%s`
    17. index=0
    18. #日志读取路径
    19. filePath="/home/weblogic/logs1"
    20. #获取该路径下所有日志文件
    21. fileList=`ls $filePath -1 -c`
    22. #遍历所有日志文件
    23. for fileName in $fileList
    24. do
    25. #将日志文件名及后缀与正则表达式做对比返回yyyy-mm-dd格式的日期值(如2018-09-10)
    26. fileDate=$( expr "$fileName" : '.*[0−9]{4}\-[0−9]{2}\-[0−9]{2}[0−9]{4}\-[0−9]{2}\-[0−9]{2}.*.*' )
    27. #将日期转换为时间戳
    28. fileDateTimeStamp=`date -d "$fileDate" +%s`
    29. #当时间戳值不为空且大于等于起始日期小于当前日期,那么获取该日志文件
    30. if [ "$fileDateTimeStamp" != "" ] && [ $fileDateTimeStamp -ge $sevenTimeStamp ] && [ $fileDateTimeStamp -lt $currentTimeStamp ]
    31. then
    32. fileList[$index]="$filePath/$fileName"
    33. else
    34. fileList[$index]=""
    35. fi
    36. (( index ++ ))
    37. done
    38. #获取所有在日期范围内的日志文件, @代表所有
    39. meetConFiles=${fileList[@]}
    40. #符合条件的日志文件数大于0就打包压缩
    41. if [ "${#meetConFiles}" -gt 0 ]
    42. then
    43. tar -zcvf $currentDate.tar.gz $meetConFiles
    44. else
    45. echo "Not found the meet condition's files!"
    46. exit 0
    47. fi
    48. echo "$currentDate.tar.gz create completion, Now begin to delete old files."
    49. #删除已被打包压缩的日志文件
    50. rm -fr $meetConFiles
    51. echo "done."
    52. exit 0