web-dev-qa-db-ja.com

ログファイルをきれいにする方法は?

ログファイルをきれいにするより良い方法はありますか?私は通常、古いログファイルを削除して新しいログファイルを作成し、より短いtype/bash/commandプログラムを探しています。エイリアスを使用するにはどうすればよいですか?

173
Gigamegs
> logfile

または

cat /dev/null > logfile

または

true | tee logfile

falseまたはbash:が実行するような出力を生成しないその他のコマンドを自由に置き換えてください)もっと雄弁になりたい場合は、すべて空のlogfile(実際には、サイズがゼロになるように切り捨てられます)。

「かかる」時間を知りたい場合は、

dd if=/dev/null of=logfile

(ちなみに、これはdd if=/dev/null > logfileと同じです)

あなたも使うことができます

truncate --size 0 logfile

(またはtruncate -s 0 logfile)完全に明示的に、または、必要に応じて、

rm logfile

(この場合、ログファイルがまだ存在しない場合、アプリケーションが通常、ログファイルを再作成するという一般的な動作に依存しています)。

ただし、ログファイルは通常便利なので、コピーを圧縮して保存することをお勧めします。独自のスクリプトでそれを行うこともできますが、少なくとも既存の実用的なソリューション(この場合はlogrotate)を使用することをお勧めします。これはまさにそれを実行でき、合理的に構成可能です。

複数のファイルに対してそれを行う必要がある場合、安全な方法は

truncate -s 0 file1 file2 ...

または

> file1 > file2 ...

一部のシェル(zsh)では、複数のリダイレクト先を指定することもできます。

これは機能します(少なくともbashでは)。必要なすべてのリダイレクトが作成されるため、最後のリダイレクトのみが入力をキャッチします(この場合は何もしません)。複数のファイルを含むteeの例は、どのような場合でも機能するはずです(teeが複数の出力ファイルの処理方法を知っている場合)

もちろん、古き良きシェルループも同様に機能します。

for f in file1 file2 ... ; do
    # pick your favourite emptying method
done

ただし、コマンドがファイルごとに個別に実行されるため、処理速度は大幅に低下します。これは、findを使用することで解決できる場合があります。

find <criteria matching required files> \
    -exec <command capable of zeroing several files> {} \+

または

find <criteria matching required files> -delete
341
peterph