shell脚本定时清除目录下的长时间未修改的目录或文件

shell脚本定时清除目录下的长时间未修改的目录或文件

shell脚本定时清除目录下的长时间未修改的目录或文件

linux运行中,每天会新增很多日志等临时文件,如何定时清理呢,今天教大家一招,如何清理长时间未修改的日志等临时文件,在data下新建一个deletefile.sh

vi deletefile.sh

将下面命令粘贴进去,保存

#!/bin/bash
ds=/
dir1=/data/wwwroot/default/html/
#dir2=/opt/dir2
#dir3=/opt/dir3
#array=($dir1 $dir2)
array=($dir1)
#删除最小粒度控制
#minTime=60
let minTime=60*60*24*1
echo $minTime
currentTime=$(date +%s)
echo "当前时间:"$currentTime
for(( i=0;i<${#array[@]};i++))
do
fileArr=`ls -l ${array[i]} | awk -F " " '{print $9}'`
for j in $fileArr
do
filesubArr=`ls -l ${array[i]}$j | awk -F " " '{print $9}'`
for k in $filesubArr
do
createTime=`stat -c %Y "${array[i]}$j$ds$k"`
echo ${array[i]}$j$ds$k"文件上次修改时间:"$createTime
mTime=`expr $currentTime - $createTime`
echo "时间差:"$mTime
if [ $mTime -gt $minTime ] ; then
echo "删除:"${array[i]}$j$ds$k
rm -rf ${array[i]}$j$ds$k
fi
done
done
done

将上面shell脚本保存为deletefile.sh

chmod 777 deletefile.sh

打开contab

crontab -e

*/5 * * * * /data/deletefile.sh

那么这里有必要提一下crontab的参数介绍

第一个* 一小时当中的第几分钟 0-59
第二个* 一天当中的第几小时 0-23
第三个* 一个月当中的第几天 1-31
第四个* 一年当中的第几月 1-12
第五个* 一周当中的星期几 0-7(0和7都代表周日)

* 代表任何时间,比如第一个 * 就代表一小时中的每分钟都执行
, 代表不连续的时间,比如 0 8,12,16 * * * 代表每天8,12,16点0分执行
- 代表连续的时间范围,比如0 5 * * 1-6 代表在周一到周六凌晨5点0分执行
*/n 代表每个多久执行一次,比如*/10 * * * *代表每隔10分钟执行一次

例子:
45 22 * * *
在22点45分执行

0 17 * * 1
在每周1的17点0分执行

0 5 1,15 * *
在每月1号和15号的凌晨5点0分执行

40 4 * * 1-5
在每周一到周五的凌晨4点40分执行

*/10 4 * * *
在每天的凌晨4点,每隔10分钟执行一次

0 0 1,15 * 1
每月1号和15号,每周1的0点0分都会执行
注意:星期几和几号最好不要同时出现,他们的意义都是天,容易混淆


{{collectdata}}

网友评论0