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

Ste*_*e88 121 unix bash shell find

我是shell脚本的新手,有人可以帮忙吗?我想删除文件夹中的脚本,从当前日期回到10天.脚本如下:

2012.11.21.09_33_52.script
2012.11.21.09_33_56.script
2012.11.21.09_33_59.script
Run Code Online (Sandbox Code Playgroud)

该脚本将每隔10天与Crontab一起运行,这就是我需要当前日期的原因.

Gil*_*not 407

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

find ./my_dir -mtime +10 -type f -delete
Run Code Online (Sandbox Code Playgroud)

说明

  • ./my_dir 你的目录(用你自己的替换)
  • -mtime +10 超过10天
  • -type f 只有文件
  • -delete没有惊喜.在执行整个命令之前删除它以测试find过滤器

并注意./my_dir存在以避免不良意外!

  • 非常小心地为这些命令提供绝对路径!有一次,在cron作业中使用非常类似的命令,我不小心删除了生产邮件服务器上超过10天的每个文件,我可以告诉你恢复并不好玩. (76认同)

Mar*_*Zen 15

只需加密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
Run Code Online (Sandbox Code Playgroud)

代码建立在sputnick的答案之上,并增加了一些东西.

  • 使用时间戳命名的日志文件
  • 指定日志文件夹
  • 查找仅在日志文件夹中查找*.txt文件
  • 删除超过7天的日志文件(假设这是用于备份日志)
  • 记下开始/结束时间
  • 计算经过的时间......


glg*_*lgl 6

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

find -mmin +14400 -delete
Run Code Online (Sandbox Code Playgroud)

  • 致[匿名编辑器](http://stackoverflow.com/review/suggested-edits/5805137):如果`find` 有`-rm-rf` 选项,那么哪个版本? (2认同)