现有一个需求,须要定时删除积累太久的目录,而且部分目录不可删除。在此,咱们分析了一下该父目录的命名结构:非连续性数字命名,部分目录中包含a.txt文件。以下图所示:html
在此,咱们对此可做以下操做,获取该父目录下最大(max)以及最小(min)目录的名字,增长一个可变deduce值,须要删除的目录区间范围则为:[min,max-deduce),剩余留下的目录区间范围则为:[max-deduce,max]。ios
实现的内容有:一、磁盘空间低于某值批量删除文件目录shell
二、保留最新的部分目录bash
三、删除的目录中包含某个文件时跳过spa
四、Mac OS加入定时任务code
辅助建立文件夹操做:htm
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()
完整脚本:blog
###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
关于定时任务的介绍,可见 http://www.javashuo.com/article/p-nffscgek-bx.html 此文章详解。crontab