shell脚本之根据磁盘剩余大小去删除日志

157 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

`#!/usr/bin/env bash

#======定义变量---start========= #定义要清理的目录,注意每个目录用双引号引起来,并且以空格分割 logsPathArray=("/opt/logs" "/home") #定义磁盘容量超过百分之多少才会去清理 diskPercent=91 #======定义变量---end=========

#判断linux系统是否有大约指定百分比容量的文件系统 CheckFilesystem(){ #看是否有大于89%的文件系统 dfList=df -hT |awk '{if (NR>1){print $6}}' |sed 's/.$//' |awk '$NF>"'"$diskPercent"'"{print $NF}' dfListLength=echo ${#dfList} }

#删除类似.log的日志文件 DeleteLogs(){ #遍历文件夹数组,删除指定目录的文件类型,注意文件类型是写死的。 for i in {logsPathArray[@]} do #删除指定的前缀和后缀的日志文件 find i -name "access.20*.log" |xargs rm -rf find iname"hostmanager.20.log"xargsrmrffindi -name "host-manager.20*.log" |xargs rm -rf find i -name "gc-[0-9].log" |xargs rm -rf find iname"hostmanager.20.log"xargsrmrffindi -name "host-manager.20*.log" |xargs rm -rf find i -name "catalina-20.out" |xargs rm -rf #找出特殊的超大文件。文件保留不要删除,使用echo置空它。(xargs sed -i '1,d)是清空,慎用findd' {})是清空,慎用 find i -name "*.log" |xargs du -sh |grep -E "[1-9].[0-9]G" |awk '{print 2}' |xargs sed -i '1,d' {} done }

Main(){ CheckFilesystem if [ dfListLengthgt0];thenDeleteLogselseecho"没有大约dfListLength -gt 0 ];then DeleteLogs else echo "没有大约{diskPercent}%的文件系统被清理" fi }

Main`