我如何删除除最近 24 个备份之外的每个每小时备份?

我如何删除除最近 24 个备份之外的每个每小时备份?

我曾经有一台服务器,每小时/每天进行备份,所有这些都很容易获得,这要归功于这个很好的教程。不幸的是,上述服务器崩溃了,现在我不得不在一台没有运行我最喜欢的 Linux 版本的 NAS 上进行备份。碰巧的是,我之前的解决方案无法在上述 NAS 上运行,因为它的二进制文件提供的选项较少。

但是,我发现这些hourly.n备份名称很糟糕。我宁愿将它们格式化为horaire_YYYY_MM_DD_HHhMM2,以便用户立即知道何时进行了哪个备份。

我希望保留 24 小时备份,而不是仅保留每日备份。请注意,我确实不是只想保留过去 24 个小时的每小时备份;如果由于某种原因跳过了一些备份,我仍然希望保留 24 个备份,即使其中一些备份已超过一天。

以下是我以前的做法:

        ls --format=single-column --directory --sort=time $(scheme "*") \
            | tail --lines +$((backup_count + 1)) \
            | xargs --verbose --delimiter="\n" rm -rf

scheme只是一个确保备份目录格式正确的函数,包括日期。这里使用 来*匹配每个每小时备份。ls列出每个每小时备份目录,按创建时间向后排序4tails丢弃最新的 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 个每小时备份之一的每个每小时备份运行命令?


  1. 嗯,也许可以,但这意味着放弃 NAS 提供商提供的所有用户友好工具和支持,而这并不是我们想要的。
  2. horaire而不是hourly因为用户和我都是法语使用者。
  3. 备份服务器必须离线一天,因为它需要移动,例如
  4. 如果日期忽略夏令时,按字母顺序排列可能也行,这是一个不幸但可以接受的折衷方案。

相关内容