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

我是 shell 脚本的新手,有人能帮忙吗?我想删除文件夹中的脚本从当前日期回到10天。 剧本是这样的:

2012.11.21.09_33_52.script
2012.11.21.09_33_56.script
2012.11.21.09_33_59.script

该脚本将运行在每10天与 Crontab,这就是为什么我需要当前的日期。

357865 次浏览

如果你能负担得起通过文件数据工作,你可以做

find -mmin +14400 -delete

find是完成这类任务的常用工具:

find ./my_dir -mtime +10 -type f -delete

解释

  • ./my_dir目录(用您自己的目录替换)
  • 超过10天的 -mtime +10
  • 只有 -type f文件
  • 毫不意外

注意 ./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 只在 log 文件夹中查找 * . txt 文件
  • 类型 f 确保只删除文件
  • Maxdeep 1确保不输入子文件夹
  • 超过7天的日志文件将被删除(假设这是用于备份日志)
  • 记录开始/结束时间
  • 计算备份操作的运行时间..。

注意 : 要测试代码,只需使用-print 而不是-print-delete。但是要仔细检查你的路径。

注意 : 确保通过 date-setup timezone/ntp 正确设置服务器时间。另外,用“ stat filename”检查文件时间

注意 : mtime 可以替换为 mmin,以便更好地控制,因为 mtime 在处理获取文件在天上下文中的时间戳时会丢弃所有分数(大于2天(+ 2天)实际上意味着3天)

-mtime +$days  --->  -mmin  +$((60*24*$days))