我想删除文件夹中从当前日期到10天的脚本。脚本看起来像:
2012.11.21.09_33_52.script
2012.11.21.09_33_56.script
2012.11.21.09_33_59.script
该脚本将与Crontab一起每10天运行一次,这就是为什么我需要当前日期。
find
是此类任务的常用工具:
find ./my_dir -mtime +10 -type f -delete
解释
./my_dir
您的目录(替换为您自己的目录)-mtime +10
超过10天- 仅限
-type f
的文件 -delete
不足为奇在执行整个命令之前,删除它以测试find
过滤器
注意./my_dir
的存在以避免不好的惊喜!
只是对上面的shell脚本进行了补充,删除了旧文件,但记录和计算了的运行时间
#!/bin/bash
path="/data/backuplog/"
timestamp=$(date +%Y%m%d_%H%M%S)
filename=log_$timestamp.txt
log=$path$filename
days=7
START_TIME=$(date +%s)
find $path -maxdepth 1 -name "*.txt" -type f -mtime +$days -print -delete >> $log
echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> $log
... code for backup ...or any other operation .... >> $log
END_TIME=$(date +%s)
ELAPSED_TIME=$(( $END_TIME - $START_TIME ))
echo "Backup :: Script End -- $(date +%Y%m%d_%H%M)" >> $log
echo "Elapsed Time :: $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) " >> $log
该代码添加了一些内容。
- 使用时间戳命名的日志文件
- 指定了日志文件夹
- find只在日志文件夹中查找*.txt文件
- 类型f确保只删除文件
- maxdepth 1确保您不进入子文件夹
- 超过7天的日志文件将被删除(假设这是备份日志)
- 记下开始/结束时间
- 计算备份操作的运行时间
注意:要测试代码,只需使用-print而不是-print-delete。但一定要仔细检查你的路径。
注意:请确保通过日期设置时区/ntp正确设置服务器时间。另外,使用"stat filename"检查文件时间
注意:为了更好地控制,可以用mmin替换mtime,因为mtime在处理天上下文中获取文件的时间戳时会丢弃所有分数(早于2天(+2天)实际上意味着3天)
-mtime +$days ---> -mmin +$((60*24*$days))
如果你能负担得起通过文件数据进行工作,你可以进行
find -mmin +14400 -delete