【Linux】32. shell脚本 定时删除 过时 的某类文件

1.功能:删除该path目录下的超过设定时间的文件夹以及这些文件夹中的文件

注意:只会删除path目录下的目录,不会删除path下的文件。

path=/home/user/dir
# 下面的date若设置为负数,表示删除这些天内修改过的目录;若设置为正数(必须带上+号)表示删除这些天内未修改过的目录。
date=+3
echo "path:"$path
echo "date:"$date

function rm_old_dir(){
for file in `ls $path` #注意此处这是两个反引号,表示运行系统命令
do
 if [  -d $path"/"$file ] 
 then
 find $path"/"$file -mtime $date |xargs rm -rf {}
 else
 echo $path"/"$file
 fi
done
} 

rm_old_dir
2.写一个shell脚本remove_file.sh,用来删除文件,remove_file.sh内容如下:

功能:删除path1和path2目录下(包括其子目录下)的超过30天未修改的.bag .log等后缀结尾的文件。如果只需要删除一个path路径,直接去掉对应的find语句即可。

path1=/home/user/dir1
path2=/home/user/dir2
date=+30
fileName=".bag .log .mp4 .mkv .gz .bin"

echo "path1:"$path1
echo "path2:"$path2
echo "date:"$date
echo "file:"$fileName

OLD_IFS="$IFS"
IFS=" "
array=($fileName)
IFS="$OLD_IFS"    
for var in ${array[@]}
do
   find $path1 -mtime $date -name "*"$var | xargs rm -rf {}
   find $path2 -mtime $date -name "*"$var | xargs rm -rf {}
done

#### /etc/crontab
#### */1 *    * * *   root bash /home/mdc/remove_files.sh

对于上面使用到的OLD_IFS="$IFS"命令可以参考博客:shell脚本中oldIFS=$IFS https://www.cnblogs.com/to-here/p/11884472.html.

  • $IFS是shell的一个特殊变量,它是一个内部字段分隔符。
  • OLD_IFS="$IFS"是用一个新变量OLD_IFS来保存默认的IFS
  • 然后IFS=" "IFS设置为空格,即空格为分隔符;
  • array=($fileName)就是把$fileName通过空格分割成数组;
  • 最后IFS="$OLD_IFS"就是还原IFS为默认值。

对于上面使用到的find -mtime命令可以参考博客: https://blog.csdn.net/u010900754/article/details/83027831


3.在ubuntu定时执行的系统文件/etc/crontab最后加上一句:
*/30 *	* * *   root bash /home/user/remove_file.sh

表示每30分钟执行一次删除脚本。注意修改上面这句话对应的路径,/home/user/改为你remove_file.sh存放的目录。




不推荐使用下面的一个shell脚本外加一个txt配置文件的方式,命令太复杂,我是记不住这下面的前几行命令。

path=`sed '/^PATH=/!d;s/.*=//' remove_config.txt`
date=`sed '/^DATE=/!d;s/.*=//' remove_config.txt`
fileName=`sed '/^FILES=/!d;s/.*=//' remove_config.txt`

echo "path:"$path
echo "date:"$date
echo "file:"$fileName

OLD_IFS="$IFS"
IFS=" "
array=($fileName)
IFS="$OLD_IFS"
for var in ${array[@]}
do
   find $path -mtime +$date -name "*"$var | xargs rm -rf {}
done

再写一个配置文件remove_config.txt ,用来配置要删除的路径,日期,文件格式
remove_config.txt 内容如下:

PATH=/home/mdc/data/
DATE=30
FILES=.bag .log

上面的配置就是删除/home/mdc/data/目录下(也包括它的各级子目录)的最后修改时间超过30天的.bag.log结尾的文件。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值