如何旋转类似于 logrotate 的枚举文件名?

And*_*dré 4 linux bash logrotate

我有几个文件,比如 map-0.jpg(最新)、map-1.jpg、map-2.jpg、...、map-9.jpg(最旧)。现在我的 cronjob 从互联网上下载了一张新图片,并将其保存为 map-0.jpg。但是,所有其他文件都应重新枚举(0 -> 1、1 -> 2 等)。就我而言,数字 9 可以丢弃。

是否有一个方便的 bash 命令可以像 logrotate 一样枚举我的文件?

感谢帮助!

les*_*ana 5

您可以在有一些限制的情况下使用 logrotate。

创建一个rotatemap.conf

/path/to/map.jpg {
  rotate 9
}
Run Code Online (Sandbox Code Playgroud)

然后像这样从你的 cronjob 运行 logrotate:

logrotate -f -s /path.to/rotatemap.state /path/to/rotatemap.conf
Run Code Online (Sandbox Code Playgroud)

这会将文件重命名map.jpgmap.jpg.1并删除旧文件(map.jpg.9如果存在)。

限制:

  • 几乎每条路径都必须进行硬编码。
  • 旋转文件中的数字始终位于文件名的末尾。至少我发现没有办法改变这一点。

阅读详细的 logrotate ( man logrotate)手册以获取更多信息。