批处理文件内容配置
文件夹下面超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