根据文件日期的 rsync 目标

根据文件日期的 rsync 目标

我在服务器上有一个很大的日志文件目录。所有日志都位于一个大目录中。

我们希望将这些备份到另一台主机(我们的存档服务器),并且只在“实时”服务器上保留最近 90 天的备份。

但是,由于我们使用此应用程序生成的日志数量庞大,因此我们将创建一个难以浏览的庞大文件夹。是否可以使用 RSYNC 根据文件日期(而不是今天的当前日期)指定目标文件夹?

例如..

rsync <options> /logs/*.log ArchiveServer:/archive/ServerA/logs/<YYYY>/<MM>
where application.20111230.log gets dumped to /archive/ServerA/logs/2011/12
and application.20120301.log gets dumped to /archive/ServerA/logs/2012/03

我可以将它们全部转储到一个通用文件夹中,例如 /archive/ServerA/Current/,然后每周查找超过 90 天的文件并对其进行排序..但直接在 rsync 中执行此操作似乎会更干净(并且我不会在两个地方查找日志,具体取决于它有多新)

答案1

像这样吗?

rsync /logs/*.$(date '+%Y%m%d').log ArchiveServer:/archive/ServerA/logs/$(date '+%Y')/$(date '+%m')/

更新:

没错,所以日期已经在日志文件名中了。我应该读得慢一点。

我认为您不会直接使用 rsync 执行此操作,而是将其包装在脚本中。如果您想在第一次运行中完成所有操作,请执行如下操作:

for daysago in `seq 0 90`
do
  rsync /logs/*.$(date '+%Y%m%d' -d "$daysago days ago").log ArchiveServer:/archive/ServerA/logs/$(date '+%Y' -d "$daysago days ago")/$(date '+%m' -d "$daysago days ago")/
done

您可以在循环中的 rsync 命令前面添加一个“echo”来查看是否是您想要的。

无论您做什么都将融入这些元素,尽管其他人在 shell 脚本方面会比我更聪明、更优雅。

相关内容