shell字符串转日期,日期转字符串,判断字符串包含某个字符串,删除某个目录下的几天前的日志文件

字符串与日期互转

# 日期转字符串
date +%F  #输出格式 YYYY-MM-DD
date +'%F %H:%m:%S' #输出格式 YYYY-MM-DD HH:mm:ss

# 字符串转日期
date -d '2016-12-27'
date -d '2016-12-27' +%s #转成时间戳

判断字符串包含某个字符串

test1="aaabbbb"
test2="a"
if [[ $test1 == *$test2* ]]; then
   echo "${test1} 包含 ${test2}"
fi

字符串截取掉子字符串

Linux 的字符串截取很有用。有八种方法。
假设有变量 var=http://www.aaa.com/123.htm.

  1. # 号截取,删除左边字符,保留右边字符。
    echo ${var#*//}
    其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
    即删除 http://
    结果是 :www.aaa.com/123.htm

  2. ## 号截取,删除左边字符,保留右边字符。
    echo ${var##*/}
    其中 ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
    即删除 http://www.aaa.com/
    结果是 123.htm

  3. %号截取,删除右边字符,保留左边字符
    echo ${var%/*}
    %/* 表示从右边开始,删除第一个 / 号及右边的字符
    结果是:http://www.aaa.com

  4. %% 号截取,删除右边字符,保留左边字符
    echo ${var%%/*}
    %%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
    结果是:http:

  5. 从左边第几个字符开始,及字符的个数
    echo ${var:0:5}
    其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
    结果是:http:

  6. 从左边第几个字符开始,一直到结束。
    echo ${var:7}
    其中的 7 表示左边第8个字符开始,一直到结束。
    结果是 :www.aaa.com/123.htm

  7. 从右边第几个字符开始,及字符的个数
    echo ${var:0-7:3}
    其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
    结果是:123

  8. 从右边第几个字符开始,一直到结束。
    echo ${var:0-7}
    表示从右边第七个字符开始,一直到结束。
    结果是:123.htm

删除某个目录下的文件

fileDir=/test/
# 获取目录下所有的文件名称
tempFileName=`ls $fileDir`
# 将上面这个变量转换为数组,进行遍历
fileNames=($(echo $tempFileName))
for fileName in ${fileNames[@]}
do
  echo "`date +'%F %H:%M:%S'` rm file $fileName"
  rm $fileDir$fileName
done

删除日志目录的下几天之前的日志文件

此功能用到了上面的所有代码
场景:日志目录下一天一个日志文件,日志文件以日期为后缀
例如: test.log(当天的日志文件),test.log.2017-12-24(历史的日志文件)
代码如下:

#!/bin/bash
#########################
#
#删除test目录下的日志
#
########################

# 删除几天前的日志
delete_days=2

# 要删除的日志文件目录
fileDir=/test/

# 要删除的日志文件名前缀
fileNamePre=test.log.

# 获取目录下所有的文件名称
tempFileName=`ls $fileDir`

# 将上面这个变量转换为数组,进行遍历
fileNames=($(echo $tempFileName))

# 当天日期
today=`date +%F`
#echo $today
# 当天零点时间戳
todayTime=`date -d "$today" +%s`
#echo $todayTime

echo "`date +'%F %H:%M:%S'` 删除目录${fileDir}${delete_days}天前日志!"

# 遍历数组,找到2天前的文件删掉
for fileName in ${fileNames[@]}
do
  if [[ $fileName == $fileNamePre* ]]; then
    # 文件名的后缀日期
    fileDay=${fileName#*$fileNamePre}

    # 转换为时间戳
    fileDayTime=`date -d "$fileDay" +%s`
    #echo $fileDayTime

    # 文件日期与当天的时间差,秒级
    dayTime=$[todayTime-fileDayTime]
    #echo $dayTime

    # 判断文件是否要删除
    if [[ $dayTime -gt $[delete_days*24*60*60] ]]; then
      echo "`date +'%F %H:%M:%S'` rm file $fileName"
      rm $fileDir$fileName
    fi

  fi

done

echo "`date +'%F %H:%M:%S'` 删除日志结束!"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值