【发布时间】:2014-04-03 15:33:23
【问题描述】:
假设一个 shell 脚本(commands.sh)只有很少的命令。
我需要编写一个脚本,将 commands.sh 执行的命令的输出发送到文件 f1.csv 如果文件大小超过 1MB,则输出流应转到文件 f2.csv 如果此处文件大小再次超过 1 mb,则输出流应转到文件 f3.csv 如果 f3.csv 的大小超过 1mb,则应删除旧的 f1 并再次创建新文件 f1, 输出流应写入 f1。这个过程应该继续下去。
我可以写crontab文件,只是shell脚本有点棘手
我一直在尝试:
#!/usr/bin/env bash
PREFIX="f"
# Maximum size after which you want a new file in bytes
MAX_SIZE=1048576
LAST_FILE=`ls "$prefix"*.csv | tail -1`
# Check if file exists and if it does not, create it.
if [[ -z "$LAST_FILE" ]]
then
LAST_FILE=$PREFIX"1.csv"
touch $LAST_FILE
fi
LAST_FILE_NO=`echo $LAST_FILE | sed s/$PREFIX/''/ | sed s/.csv/''/`
LAST_FILE_SIZE=`stat -c %s $LAST_FILE`
if [ `stat -c %s $LAST_FILE` -lt 200 ]
then
`/bin/sh ./sam.sh >> $LAST_FILE`
else
UPCOMING_FILE_NO=$((LAST_FILE_NO+1))
`/bin/sh ./sam.sh >> $PREFIX$UPCOMING_FILE_NO.csv`
fi
感谢大家的帮助。
编辑:辅助 shell 脚本也可以工作了... 现在,如果有人可以在完成 3 个文件并从 f1 开始后帮助我重置。
谢谢
【问题讨论】:
-
用
logrotate怎么样?
标签: linux bash shell unix terminal