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
结尾的文件。