我想删除一个文件夹中从当前日期往回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
存在,以避免出现意外情况!
for a in ...
循环内,我添加了一个if [ -d $a ]; then...
到我的脚本中! - theglossy1mtime
是最常见的,大多数文件系统/操作系统不关心 atime
(主要取决于 /etc/fstab
中的细微设置)。 - Gilles Quénot对上面的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-设置时区/ntp正确设置服务器时间。此外,请使用'stat文件名'检查文件时间。
注意:可以使用mmin替换mtime以获得更好的控制,因为当处理与日期有关的文件时间戳时,mtime会丢弃所有小数部分(比+2天更早(+2 days)实际上意味着3天)。
-mtime +$days ---> -mmin +$((60*24*$days))
find
和delete
命令写入同一个$log
。为什么会创建三个日志文件,前两个没有内容,最后一个文件包含已删除的文件列表?我该怎么做才能使查找和删除命令不生成多个文件? - Fokwa Best_%H%M%S
。对于小文件,只生成一个日志文件,但是当要删除的文件数量很大时,会生成多个带有不同_%H%M%S
的日志文件。删除此部分后,所有内容都写入一个文件。 - Fokwa Best
man date
的文档了吗? - Jens