在Unix中使用shell脚本删除超过10天的文件



我想删除文件夹中从当前日期到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