shell字符串转日期,日期转字符串,判断字符串包含某个字符串,删除某个目录下的几天前的日志文件
2017-12-27 19:04
393 查看
字符串与日期互转
# 日期转字符串 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.
# 号截取,删除左边字符,保留右边字符。
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm
## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}
其中 ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/
结果是 123.htm
%号截取,删除右边字符,保留左边字符
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.aaa.com
%% 号截取,删除右边字符,保留左边字符
echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
从左边第几个字符开始,及字符的个数
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
从左边第几个字符开始,一直到结束。
echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :ww
4000
w.aaa.com/123.htm
从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
从右边第几个字符开始,一直到结束。
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'` 删除日志结束!"
相关文章推荐
- Shell脚本执行hive语句 | hive以日期建立分区表 | linux schedule程序 | sed替换文件字符串 | shell判断hdfs文件目录是否存在
- shell 脚本---每隔几个小时查看日志文件中包含某些字符串的行数
- shell删除当前目录及递归目录下文件指定字符串
- python--文件删除、判断目录存在、字符串替换
- 在Shell里面判断字符串是否为空 ,文件存在,目录存在
- Shell循环列出目录下所有文件或查找目录下包含指定字符串的文件
- aix shell 判断文件中是否包含某字符串
- 使用shell删除目录下几天前生成文件方法
- shell-判断指定文件中是否包含指定的字符串
- python--文件删除、判断目录存在、字符串替换
- shell-删除目录下指定日期前的所有文件
- shell脚本,对指定目录下C文件,替换和删除字符串
- shell删除当前目录及递归目录下文件指定字符串
- shell 脚本 打印指定目录下包含某些字符串的文件
- shell脚本中字符和文件的判断及字符串入参的注意事项
- shell 判断文件中是否含有某个字符串
- 子目录下,grep搜索子目录中包含某字符串的特定文件
- 删除指定目录下几天前文件,bat
- shell下判断两个字符串是否有包含关系
- shell删除包含某个字符串的上下几行