【问题标题】:Logrotate and Shell ScriptLogrotate 和 Shell 脚本
【发布时间】:2012-10-19 03:32:24
【问题描述】:

给定目录中的日志文件标记如下:

log_from_2012_08_14-11:57:21_To_2012_09_14-11:56:12.zip log_from_2012_10_14-11:57:21_To_2012_11_14-11:56:12.zip

鉴于大约有 155450 个这样的文件,我怎样才能以简单或有效的方式执行以下操作:

使用 logrotate 或其他工具为每个月创建一个文件夹:例如,mkdir $currentMont = october,然后将所有 2012 年 10 月的文件放在那里,依此类推,每个月。

【问题讨论】:

  • 这些日志跨越 2 个月,您希望它们按开始时间排序吗?
  • 嗯,这是我的服务器每 2 小时记录一次日志的示例:)

标签: shell logrotate


【解决方案1】:

听起来像一个带有几个嵌套 for 循环的 bash 脚本就可以解决问题。

类似:

for year in $(seq -f "%02g" 0 20); do
    for month in $(seq -f "%02g" 0 12); do
        dest = "20${year}-${month}"
        mkdir "$dest"
        mv "log_from_${dest}*" "${dest}";
    done;
done;

显然,您需要根据自己的需要进行调整。如果一个目录中有太多文件,您可能会遇到行 glob 限制,在这种情况下,您必须使用 find . | xargs mv 来避免该问题。

【讨论】:

  • 是的,但非常感谢您的帮助,我认为 glob 限制几乎肯定会弹出,我什至可以在服务器停止的目录中执行 ls ......因为排序能力ls 我必须执行 ls -f 才能查看文件...想象一下 for 循环 lol
猜你喜欢
  • 1970-01-01
  • 2019-09-13
  • 2017-04-26
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多