8

我有一个 cron 作业,它每 30 分钟运行一次,以生成带有时间戳的日志文件,如下所示:

test20130215100531.log, 
test20130215102031.log  

我想每天创建一个带有日期时间戳的文件夹,并在生成时将日志文件推送到相应的日期文件夹中。

我需要在 AIX 服务器上使用 bash 来实现这一点。

4

2 回答 2

18

也许您正在寻找这样的脚本:

#!/bin/bash

shopt -s nullglob  # This line is so that it does not complain when no logfiles are found
for filename in test*.log; do # Files considered are the ones starting with test and ending in .log
    foldername=$(echo "$filename" | awk '{print (substr($0, 5, 8));}'); # The foldername is characters 5 to 13 from the filename (if they exist)
    mkdir -p "$foldername"  # -p so that we don't get "folder exists" warning
    mv "$filename" "$foldername"
    echo "$filename $foldername" ;
done

我只用你的样本进行了测试,所以在使用包含重要内容的目录之前进行适当的测试。

根据评论进行编辑:

将您的原始脚本更改为:

foldername=$(date +%Y%m%d)
mkdir -p  /home/app/logs/"$foldername"
sh sample.sh > /home/app/logs/"$foldername"/test$(date +%Y%m%d%H%M%S).log

或者,如果目录是在其他地方创建的,只需执行以下操作:

sh sample.sh > /home/app/logs/$(date +%Y%m%d)/test$(date +%Y%m%d%H%M%S).log
于 2013-02-15T14:09:34.130 回答
2

你应该使用 logrotate!它已经可以为您执行此操作,您只需写入同一个日志文件即可。

检查他们的手册页以获取信息: http: //linuxcommand.org/man_pages/logrotate8.html

于 2013-02-15T14:57:45.070 回答