#!/bin/bash #文件夹不存在,则创建,参数从$1开始 createFolder(){ if [ ! -d $1 ]; then mkdir -p $1 #创建文件夹: -p 递归创建文件夹 chmod -R 777 $1 # -R 递归给文件夹最大权限0777 fi } #文件不存在,则创建,参数从$1开始 createFile(){ if [ ! -f $1 ]; then touch $1 #创建文件 chmod -R 777 $1 # -R 递归给文件最大权限0777 fi } #把英文的月份转为数字 monthToNumber(){ case $1 in "Jan") echo "01" ;; "Feb") echo "02" ;; "Mar") echo "03" ;; "Apr") echo "04" ;; "May") echo "05" ;; "Jun") echo "06" ;; "Jul") echo "07" ;; "Aug") echo "08" ;; "Sep") echo "09" ;; "Oct") echo "10" ;; "Nov") echo "11" ;; "Dec") echo "12" ;; *) echo "00" #default选项:异常月份,返回00 ;; esac return $? #返回结果 } rootFolder=/www/test/split #定义日志拆分文件夹根目录 todayDay=$(date -d "now" +%Y-%m-%d) #获取当前日期:年月 #:<<EOF 多行注释START #逐行读取文件中的内容 cat /www/test/test.log | while read line do #正则匹配字符串: [24/Apr/2020:10:32:26 +0800] # grep -o : 只输出符合 RE 的字符串. (gnu 新版独有, 不见得所有版本都支持.) logTime=`echo $line|grep -o '\[[0-9]\{2\}\/[A-Za-z]\{1,\}\/[0-9]\{4\}:[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\s\{1\}+[0-9]\{4\}\]'` #日志记录的时间 if [ ! -n "$logTime" ]; then continue #匹配失败,进入下一个循环,读取下一行数据 fi #根据正则匹配出的$logTime,截取出年月日 year=`echo ${logTime:8:4}` #字符串截取 年 monthEnglish=`echo ${logTime:4:3}` #字符串截取 月 month=$(monthToNumber $monthEnglish) # 英文月份转为数字 day=`echo ${logTime:1:2}` #字符串截取 日 touchFile=test-$year-$month-$day.log #test-2020-04-04.log 拆分的文件名定义 splitFile=$rootFolder/$touchFile #拼接日志存放的位置 #如果是今天的日志,则不记录 todayFile=$splitFolder/test-$todayDay.log #定义今天的日志文件名 if [ "$splitFile" = "$todayFile" ]; then #echo $todayFile break #已经读到了今天的日志了,不记录,直接跳出循环 fi createFolder $rootFolder #文件夹不存在时,创建文件夹 createFile $splitFile #文件不存在时,创建文件 echo $line>>$splitFile # 文件内容追加 #exit 0 #程序退出操作 done #EOF 多行注释END
转自
(41条消息) Shell 把日志记录按天切割到不同的文件_夏已微凉、的博客-CSDN博客
https://blog.csdn.net/qq_36025814/article/details/109102049
标签:文件,Shell,echo,按天,文件夹,日志 From: https://www.cnblogs.com/paul8339/p/16931868.html