2009-06-17 9 views
0

最新のN個のエントリを持つログがあります。ファイルが少し大きければ何の問題もありません。N行の下にファイルを保存するにはどうすればいいですか?

私の最初の試みは、定期的に実行されている:

tail -n 20 file.log > file.log 

残念ながら、それは単にファイルを空にします。私はできる:

tail -n 20 file.log > .file.log; mv .file.log file.log 

しかし、それは混乱しているようだ。より良い方法がありますか?

+1

これはうんざりですが、正しく動作しますか? – Alan

+0

これには良い答えがあります: [http://stackoverflow.com/questions/123235/problem-with-bash-output-redirection](http://stackoverflow.com/questions/123235/problem-with- bash-output-redirection) –

答えて

2

私は同意すると、logrotateはおそらく必要なものです。それでもコマンドラインソリューションが必要な場合は、これで作業が完了します。 Exはラインエディタです。シェルスクリプトでの使用以外は、誰もラインエディタを使用しません。シンタックスはSh/Ksh/Bashシェル用です。 Cシェルでも同じだと思います。

ex log.001 << HERE 
$ 
-20 
1,-1d 
w 
q 
HERE 
+0

ヴィの父親!うん、本当に便利だね。 – eipipuz

6

logrotateのように聞こえます。

+0

Logrotateは一般的なログには威力を発揮しますが、あらかじめわかっていない特別なファイルにはもっと必要なものがあります。また、私の限界は時間ではなく、線のためです。とにかくおかげさまで、私は他のもののためにそれを使用します。 – eipipuz

1

logrotatesize=xxxここで、xxxは20行のおおよそのサイズであり、可能であればdelaycompressは人間の読みやすさを維持します。

+0

時間枠よりも回線の制限が必要であることに気づいてくれてありがとう。 – eipipuz