ログファイルをクリーンアップするより良い方法はありますか?私は主に既存のログファイルを削除し、新しいログファイルを生成し、より短いタイプ/bash/コマンドプログラムを探しています。エイリアスの使い方は?
答え1
> 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