我的目录结构是这样的
repos --
文件1
文件2
文件3
功能:定时清理,保存文件夹1,2,3 下面的最新的五个文件,然后将老文件删除。
一开始是这样写的,先指定文件夹路径,然后配置上定时任务,这样是可以解决定时删除老文件,然后保留最新的文件。
##/sur/bin
##描述:定时删除某个文件夹下面的文件
##作者:张川
######################################
######################################
##定义参数
##需要清理的文件夹路径
file_path=/home/yunovo/test
##需要保存文件的个数
file_num=5
## ls -t *|tail -2
###判断当该文件夹下面文件大于 ${file_num} 的时候执行。
if [ -d "${file_path}" ];then
num=`ls -l |grep "^-"|wc -l`
echo ${num}
if [ ${num} -gt ${file_num} ];then
for i in `ls -t *|tail -1`
do
echo "${file_path}/$i"
done
fi
else
echo "该文件路径错误"
fi
但是有个弊端,就是说如果要删除多个文件的目录,你得配置配置很多次。比如说我这里有文件夹1,2,3.我得对这几个文件都配置。配置过多,不能体现脚本的优势,所以后面进行了改进。直接扫描父文件夹,然后对子文件夹进行扫描。代码如下,我还是先定义一个文件夹目录。
##/sur/bin
##描述:定时删除某个文件夹下面的文件
## 只保留自定义天数
##作者:张川
######################################
######################################
##定义参数
##需要清理的文件夹路径
file_path=/home/yunovo/test/repos
##需要保存文件的个数
file_num=5
date=`date '+%Y%m%d%H%M%S'`
## ls -t *|tail -2
###判断当该文件夹下面文件大于 ${file_num} 的时候执行。
echo "=======================清理日志开始=======${date}==================" >> rizhi.log
if [ -d "${file_path}" ];then
find ${file_path}/* -maxdepth 1 -type d | while read dir;
do
count=$(find "${dir}" -type f | wc -l)
echo "${dir}:${count}" >>rizhi.log
if [ ${count} -gt ${file_num} ];then
# num=`ls -l |grep "^-"|wc -l`
# echo ${num}
# if [ ${num} -gt ${file_num} ];then
echo "---${dir}---" >>1.txt
for i in `ls ${dir} -t |tail -$((${count}-${file_num}))`
do
echo -e "${dir}/$i \n" >> rizhi.log
rm -rf ${dir}/$i
done
# fi
fi
done
else
echo "该文件路径错误"
fi
echo "=======================清理日志结束=======${date}==================" >> rizhi.log
用以记录