我有一个cron作业,每30分钟运行一次,生成带有时间戳的日志文件:
test20130215100531.log,
test20130215102031.log
我想每天创建一个文件夹,其中包含日期时间戳,并在生成时将日志文件推送到相应的日期文件夹中。
我需要在AIX服务器上用bash实现这一点。
答案 0 :(得分:13)
也许您正在寻找这样的脚本:
#!/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
答案 1 :(得分:2)
你应该使用logrotate!它可以为您完成此操作,您只需写入相同的日志文件即可。
查看他们的手册页以获取信息: http://linuxcommand.org/man_pages/logrotate8.html