0

给定目录中的日志文件,如下所示:

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 月的文件放在那里,依此类推,每个月。

4

1 回答 1

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来避免该问题。

于 2012-10-29T20:23:22.697 回答