我有一个应用程序,它会在晚上 11 点在目录中自动进行每日备份dirA
。每个备份都是一个 .tar 文件,并且有一个我无法控制的随机命名约定(例如129d3139.tar
,4a98bb6b.tar
等等)。
由于dirA
存储在空间非常有限的存储介质上,我设置了一个 cron 任务,即五分钟后的晚上 11:05,删除除最新备份之外的所有备份。bash 脚本“ clear_old_backups.sh
”如下所示,运行良好(感谢这个答案):
#!/usr/bin/env bash
find /path/to/dirA/ -type f -printf '%T@\t%p\n' |
sort -t $'\t' -g |
head -n -1 |
cut -d $'\t' -f 2- |
xargs -r rm
现在,我还想将一些较旧的存档备份保存在另一个更大的存储介质上的第二个目录中dirB
。理想情况下,dirB
我希望里面有 x4 个文件:
1 天大(只是存储在中的单个的直接复制dirA
),然后另外还有 1 周大、1 个月大和 6 个月大。
有人能帮忙编写一个可以复制并保留相关备份文件的 bash 脚本吗?
我不知道从哪里开始——我是否需要以某种方式更定期地检查文件的时间戳是否已达到“现在减 7 天”等?然后才采取相应行动?
操作系统是 Debian 12。
根据评论中的讨论,我提出以下解决方案:
在您的日常 cron 任务中...
dirA
复制到dirB/daily
并根据日期重命名。dirB/weekly
。dirB/monthly
。daily
、weekly
和中monthly
,使用已知方法删除除最新的 N 个文件之外的所有文件,例如 8 个每日备份文件、5 个每周备份文件或 7 个每月备份文件。要根据日期重命名文件并进行所有日期检查,您可以使用
date
带有不同格式说明符的命令,请参阅man date
。以下脚本未经测试,仅通过shellcheck.net检查。