在我看到我忘了在一台服务器上为php5-fpm.log添加一个logrotate-conf,现在看到它已经变得非常大了,我在问自己如何将这个日志文件拆分成单独的文件,像logrotate这样的后缀会产生。 你知道…像这样的错误从来没有发生过: – P
但是我最近想到的是:
split -C 10m -d php5-fpm.log php5-fpm.log.
…但这是生产文件,如:
php5-fpm.log.00 php5-fpm.log.01 php5-fpm.log.02 ...
从后缀中删除前导零将是一个简单的任务,可以很容易地手动完成。 但是,这里是我的问题:我怎样才能恢复后缀,使后缀最高的文件成为最低的?
要剪切后缀长度(消除零),可以执行以下操作:
$ split --suffix-length=1 -C 10m -d php5-fpm.log php5-fpm.log.
不幸的是,没有可以传递给分割的参数,这会反转后缀,但是可以使用tac而不是cat,然后反转文件并将其传递给split命令,如下所示:
$ tac php5-fpm.log | split --suffix-length=1 -C 10m -d - php5-fpm.log.
现在,您只需要再次反转分割文件(并在进行压缩时):)
$ for i in php5-fpm.log.*; do tac $i | gzip > $i.gz; rm -f $i; done
编辑:
有人可以采取另一种方法,如果你不想使用tac:
split --suffix-length=1 -C 10m -d php5-fpm.log php5-fpm. export COUNT=$(expr $(ls php5-fpm.[0-9] | wc -l) - 1) for i in $(seq 0 $COUNT); do mv php5-fpm.$i php5-fpm.log.$(expr $COUNT - $i); done
第一个命令会将大日志文件拆分成更小的文件:php5-fpm.0 php5-fpm.1 php5-fpm.2 …稍后,您将计算文件的数量,并且只用bashexpression式评估的反转数字:expr (1)。
你可以使用这个快速和脏的shell脚本实现重命名部分:
#!/bin/bash for x in php5-fpm.log.* do max=${x/php5-fpm.log./} done mkdir renamed-files || exit 1 for x in php5-fpm.log.* do num=${x/php5-fpm.log./} let num=max-num+1 mv $x renamed-files/php5-fpm.log.$num done mv renamed-files/* . rmdir renamed-files
请注意,重命名的文件将被收集到子目录中,以避免与尚未重命名的文件发生名称冲突。
还要注意,mkdir in case子目录renamed-files之后的退出不能被创build,例如因为存在该名称的文件。 在这种情况下继续使用脚本可能会产生不可逆转的不良后果。