2013-02-15 209 views
5

我有每30分钟一班,以产生与时间戳这样的日志文件,一个cron作业:shell脚本每天创建文件夹时间戳和推时间戳生成的日志

test20130215100531.log, 
test20130215102031.log 

我会喜欢每天用日期时间戳创建一个文件夹,并在生成时将日志文件推入相应的日期文件夹。

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

+0

怎么样,在00.00创建目录,每天晚上一个cronjob?然后修改实际的cronjob将文件推送到这个目录。 – fedorqui 2013-02-15 12:34:11

+0

我会建议'mkdir -p'每次创建丢失的目录,而不会抱怨它已经存在。如果00:00工作因某种原因(系统停机)失败而运行,我们是否希望所有日常工作因此而失败? – 2013-02-15 12:36:26

+0

是的,你是对的。我更喜欢你的选择。 – fedorqui 2013-02-15 12:42:21

回答

8

也许你正在寻找一个这样的脚本:

#!/bin/bash 

shopt -s nullglob # this line is so that it does not compain when no logfiles are found 
for filename in test*.log; do # Files considered are the ones startign 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 dont 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 
+0

非常感谢!如果我可以在一天开始时只创建一次目录,并且将同一天的日志写入目录,那将如何呢?现在..我正在通过一个放置在带有时间戳的位置的脚本形成日志。 – user1746666 2013-02-15 14:19:09

+0

你可以发布你的脚本创建日志文件的时间戳部分吗?从此工作更容易。 _(如果你编辑你的问题,也在这里留下评论,所以我得到通知)_ – user000001 2013-02-15 14:26:56

+0

//我在这里做一些配置的东西,然后执行另一个脚本来创建文件如下。 sh sample.sh>/home/app/logs/test $(日期+%Y%m%d%H%M%S).log 上面每30分钟运行一次,每天生成48个日志 – user1746666 2013-02-15 14:38:14