首先,我不确定它是否属于 StackOverflow 或这里,但我认为这更适用于服务器管理。
作为日常处理的一部分,我们.tar
每天都会将备份文件发送到异地备份服务器。这些文件相对较大,平均大小在 25-30 GB 之间。因此,我们只能保留大约 2 周的备份。每周五(是的,今天是星期五),都会有人通过 ssh 连接到远程服务器 OpenSuse 12.1,手动删除前一周的文件并保留本周的数据。文件中有一个一致的命名方案BACKUP<YYYYMMDD><Time stamp>
,例如类似 。
BACKUP20121022268498.tar
BACKUP20121022268498.log
BACKUP20121023268498.tar
BACKUP20121023268498.log
BACKUP20121024268498.tar
BACKUP20121024268498.log
BACKUP20121025268498.tar
BACKUP20121025268498.log
BACKUP20121026268498.tar
BACKUP20121026268498.log
BACKUP20121029268498.tar
BACKUP20121029268498.log
BACKUP20121030268498.tar
BACKUP20121030268498.log
BACKUP20121031268498.tar
BACKUP20121031268498.log
BACKUP20121101268498.tar
BACKUP20121101268498.log
等等。
大多数情况下,我会使用rm *20121022*
此示例中的命令。有时,就像此示例中一样,我甚至可以使用rm *201210[22-26]*
。快速谷歌搜索让我感到困惑。我基本上是想设置它,以便实习生可以登录并从用户目录运行脚本。
有没有简单的方法可以做到这一点?我从哪里开始?我熟悉在其他语言中使用日期函数,但我似乎不知道从哪里开始。我不经常写 Bash 脚本。谢谢。
答案1
假设文件的时间戳保持一致,您可以使用 find 来执行此操作。
find /path/to/backups -type f -maxdepth 1 -mtime +7 -delete
这将列出目录中所有文件(不递归),/path/to/backups
这些文件最后修改时间超过 7 24 小时,并删除它们。我建议先不运行第-delete
一个,直到你知道它会对你有用。
如果您希望按日历天进行操作,请使用该-daystart
选项。我发现当我有每小时轮换文件的东西但我想根据日历制定保留计划时,这个选项最有用。有时“天”和“24 小时周期”之间的区别实际上很重要,使用-daystart
肯定会使保留计划更容易解释。
答案2
您可以使用以下命令删除超过 1 周的文件:
查找/路径-类型f-名称“BACKUP*”-mtime +7-exec rm {} \;