我是shell脚本的新手,有人可以帮忙吗?我想删除文件夹中从当前日期回溯到 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
代码添加了一些东西。
注意:要测试代码,只需使用 -print 而不是 -print -delete。但是请仔细检查您的路径。
注意:请确保您的服务器时间通过 date-set timezone/ntp 正确设置。另外使用“stat 文件名”检查文件时间
注意:mtime 可以替换为 mmin 以获得更好的控制,因为 mtime 在处理在天的上下文中获取文件的时间戳时会丢弃所有分数(早于 2 天(+2 天)实际上意味着 3 天)
-mtime +$days ---> -mmin +$((60*24*$days))
如果你能负担得起通过文件数据工作,你可以做
find -mmin +14400 -delete