【SHELL】:定时任务删除指定目录文件

2020-04-17  本文已影响0人  玉米fight
现有一个需求,需要定时删除积累过久的目录,并且部分目录不可删除。在此,我们分析了一下该父目录的命名结构:非连续性数字命名,部分目录中包含a.txt文件。如下图所示: image

在此,我们对此可作如下操作,获取该父目录下最大(max)以及最小(min)目录的名字,增加一个可变deduce值,需要删除的目录区间范围则为:[min,max-deduce),剩余留下的目录区间范围则为:[max-deduce,max]。

实现的内容有:
1、磁盘空间低于某值批量删除文件目录
2、保留最新的部分目录
3、删除的目录中包含某个文件时跳过
4、Mac OS加入定时任务
辅助创建文件夹操作:

import os, sys
def MkDir():
    path1 = './a/'
    path2 = './b/'
    i = 0
    for i in range(1,101):
        file_name1 = path1 + str(i)
        file_name2 = path2 + str(i)
        os.mkdir(file_name1)
        os.mkdir(file_name2)
        i=i+1
MkDir()

完整代码:

###shell脚本
#!/bin/bash

#输出var目录下所有目录名
# var=/Users/funny/PycharmProjects/pratice/
# dir=$(ls -l /Users/funny/PycharmProjects/pratice/ |awk '/^d/ {print $NF}')
# for i in $dir
# do
#     echo $i
# done  
#tr -cd 排除除了【】外的
deduce=30
disk_capacity=$( df -h | grep '/dev/disk1s1' | awk '{print $4}' |tr -cd "[0-9]")
#获取目录名、从小到大排序、取最大值,sort -g常规排序  -r倒序排序
max_dir_ios=$(ls -l /Users/funny/PycharmProjects/pratice/a/ |awk '/^d/ {print $NF}' | sort -g |tail -n 1)
min_dir_ios=$(ls -l /Users/funny/PycharmProjects/pratice/a/ |awk '/^d/ {print $NF}' | sort -r |tail -n 1)
last_dir_ios=$(($max_dir_ios-$deduce))


echo $max_dir 
echo $last_dir
echo $disk_capacity
#-le 小于等于
#ios清理
if [ $disk_capacity -le 80 ];then
    echo "定时清理任务中。。"
    #seq(最小值 最大值)
    for i in $(seq $min_dir_ios $last_dir_ios)
        
    do
        cd /Users/funny/PycharmProjects/pratice/a/$i/
        
        if [ -f a.txt ];then
            echo "存在文件A.TXT,跳过"
            cd ..
            
        else
            echo "删除文件夹" $i
            cd ..
            rm -rf $i
            
        fi
    done
else
    echo "ios不需要清理空间~"
fi

加入Mac OS定时任务:

#shell终端
crontab -e
#每周六8点钟执行1.sh文件并输出到a.log中
0 8**6 sh /Users/funny/Downloads/1.sh >>a.log
上一篇下一篇

猜你喜欢

热点阅读