linux实现自动删除最旧的几个文件详解

批处理文件内容配置

文件夹下面超30个历史文件的情况,清除超过30个文件之外最老的那些文件

#!/bin/bash
array[0]='/project1'
array[1]='/project2'
array[2]='/com/project3'
for path in ${array[@]};
do
	cd $path
	dir_num=`ls -l |grep "^d"|wc -l`
	#判断文件夹的数量
	if [ $dir_num -gt 30 ] && [ -d $path ]; then
		#计算超过30个多少
		num=`expr $dir_num - 30`
		clean=`ls -tr | head -$num | xargs`
		echo "will delete file:"
		echo ${clean}
		#-n1 每次处理1个文件
		ls -tr | head -$num | xargs -i -n1 rm -rf {}
	fi
done	

文件第一层路径下大于1个文件时,删除超180天的文件夹。

#!/bin/bash
#不同的项目有不同的路径
array=("/project1" "/project2" "/com/project3")

for path in ${array[@]};
do
	cd $path
	dir_num=`ls -l |grep "^d"|wc -l`
	#判断文件夹的数量
	if [ $dir_num -gt 1 ] && [ -d $path ]; then
		find $path -maxdepth 1 -type d  -mtime +180 -exec rm -rf {} \;
	fi
done	

将上述脚本保存为test.sh,然后添加crontab。
记得给test.sh配置权限,chmod +x

crontab -e
#每个月第一天00:00,记录日志 /root/test.log
0 0 1 * * /root/test.sh > /root/test.log 2>&1 &
#每天00:10,不记录日志
10 0 * * * /root/test.sh >/dev/null 2>&1

写其中一个就行,这边只是举例说明

其中语句说明:

类型文件描述符默认情况
标准输入(standard input)0从键盘获得输入
标准输出(standard output)1输出到屏幕(即控制台)
错误输出(error output)2输出到屏幕(即控制台)

>/dev/null

这条命令的作用是将标准输出1重定向到/dev/null中。/dev/null代表 linux 的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了 >/dev/null 之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。

2>&1

这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起(即&1代表标准输出的位置)。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。

命令的末尾加上一个 & 符号的作用

Linux 终端命令的末尾加上一个 & 符号表示将这个任务放到后台去执行

PS:

注意:linux的第一位是分,不是秒
crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有

* 取值范围内的所有数字
/ 每过多少个数字
- 从X到Z
,散列数字

crontab [-u username] [-l|-e|-r]

参数:

-u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度;

-e: 编辑crontab 的工作内容;

-l: 查阅crontab的工作内容;

-r: 删除所有的crontab的工作内容,若仅要删除一项,请用-e去编辑。

linux 查看crontab日志

#/var/log/cron
tail -f /var/log/cron

参考文献:

清除历史文件的批处理文件配置:
https://www.jb51.net/article/123397.htm
shell中 >/dev/null 2>&1 是什么意思:
https://www.cnblogs.com/everest33Tong/p/11553383.html
linux 查看crontab日志:
https://blog.csdn.net/hello_zyg/article/details/79234942
Linux 终端命令的末尾加上一个 & 符号的作用
https://blog.csdn.net/willingtolove/article/details/113933488

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值