![我如何删除除最近 24 个备份之外的每个每小时备份?](https://linux22.com/image/1489587/%E6%88%91%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E9%99%A4%E6%9C%80%E8%BF%91%2024%20%E4%B8%AA%E5%A4%87%E4%BB%BD%E4%B9%8B%E5%A4%96%E7%9A%84%E6%AF%8F%E4%B8%AA%E6%AF%8F%E5%B0%8F%E6%97%B6%E5%A4%87%E4%BB%BD%EF%BC%9F.png)
我曾经有一台服务器,每小时/每天进行备份,所有这些都很容易获得,这要归功于这个很好的教程。不幸的是,上述服务器崩溃了,现在我不得不在一台没有运行我最喜欢的 Linux 版本的 NAS 上进行备份。碰巧的是,我之前的解决方案无法在上述 NAS 上运行,因为它的二进制文件提供的选项较少。
但是,我发现这些hourly.n
备份名称很糟糕。我宁愿将它们格式化为horaire_YYYY_MM_DD_HHhMM
2,以便用户立即知道何时进行了哪个备份。
我希望保留 24 小时备份,而不是仅保留每日备份。请注意,我确实不是只想保留过去 24 个小时的每小时备份;如果由于某种原因跳过了一些备份,我仍然希望保留 24 个备份,即使其中一些备份已超过一天。
以下是我以前的做法:
ls --format=single-column --directory --sort=time $(scheme "*") \
| tail --lines +$((backup_count + 1)) \
| xargs --verbose --delimiter="\n" rm -rf
scheme
只是一个确保备份目录格式正确的函数,包括日期。这里使用 来*
匹配每个每小时备份。ls
列出每个每小时备份目录,按创建时间向后排序4,tails
丢弃最新的 24 个并xargs
删除剩余的目录。
我现在必须确保只使用 POSIX 选项。我首先选择:
ls -1 -d -t "$(scheme \*)" \
| tail -n +$((backup_count + 1)) \
| sed 's/\n/\0/g' \
| xargs -0 rm -rf
但ls
并没有扩展*
;我用 替换了它find
,但不知道如何按创建日期对结果进行排序。我想知道我是否也可以tail
完全绕过find
,这无论如何可能是完成任务的正确工具。
我如何才能对不是最后 24 个每小时备份之一的每个每小时备份运行命令?
- 嗯,也许可以,但这意味着放弃 NAS 提供商提供的所有用户友好工具和支持,而这并不是我们想要的。
horaire
而不是hourly
因为用户和我都是法语使用者。- 备份服务器必须离线一天,因为它需要移动,例如
- 如果日期忽略夏令时,按字母顺序排列可能也行,这是一个不幸但可以接受的折衷方案。