shell 定时删除 指定目录下 较旧的文件

注:操作有风险,请自行备份好数据,本教程仅供参考。

linux脚本,可接受两个参数,用于限制 [ 指定路径 ] 的文件 [ 空间占用大小 ] ,
或者使用默认参数,默认按时间升序 - 删除较旧的文件,建议搭配定时任务使用

#定时任务,查看使用格式
cat /etc/crontab | crontab -l
#编辑定时任务
crontab -e
0 */2 * * * /home/sf/path/surveillance/srsdelfile.sh > /dev/null 2>&1
#!/bin/bash
#参数1 路径(/home/sf/path)
#参数2 最大占用空间(30G,单位:Kb)
dir="/home/sf/path/surveillance/__defaultVhost__-live-surveillance"
maxSize=31457280

if [ -n "$1" -a -n "$2" ]
then
    dir=$1;maxSize=$2
    read -t 15 -p '你指定了目录['$dir']的最大占用空间为['$maxSize'],多余且最旧的文件将被删除,确认请按y:' confirm
    if [ $? -ne 0 -o -n "$confirm" -o $confirm != "y" ]; then echo "脚本已终止执行!"; return 0; fi
fi

# For 循环使用$IFS 变量来确定字段分隔符,
# 默认情况下 $IFS 设置为空格字符
oldIFS=$IFS
IFS=$(echo -en "\n\b")
for file in `ls $dir -1rt`
do
    #判断是否文件
    if [ -d "$dir/$file" ]
    then
        echo "$dir/$file is directory"
    else
        #判断占用大小
        u=`du -s $dir | awk '{print $1}'`
        if [ $u -gt $maxSize ]
        then
            rm $dir/$file
            echo "目录$dir占用空间超过$maxSize, 已删除较旧文件:"\./\"$file\"
        else
            break
        fi
    fi
done
IFS=$oldIFS
如果您在浏览过程中,发现有侵权或者不合适的链接,请联系我们处理,谢谢
备案 域名访问错误!