サイズ別にファイル内容を消去する

サイズ別にファイル内容を消去する

ディレクトリ内のファイルを一覧表示するかどうかを検討してください。

drwx--x--x 43 root wheel 4.0K Aug 18 12:52 ..
-rw-------  1 root root  268K Aug 18 04:31 build_locale_databases_log
-rw-------  1 root root  5.2M Aug 18 17:21 access_log
-rw-------  1 root root   85K Aug 18 17:14 cpbackup_transporter.log
-rw-------  1 root root  2.1M Aug 18 05:49 cphulkd.log
-rw-------  1 root root  3.2M Aug 18 17:19 error_log
-rw-------  1 root root  1.7M Aug 18 12:52 license_log

ここでは2Mb。 (つまり)次のファイルのファイルサイズをゼロバイトにします。

access_log
cphulkd.log
error_log

ベストアンサー1

私は直接の質問に最初に答えるのが好きですが、私の答えを読む前にこのコマンドを実行しないでください。あなたが要求したコマンド(おそらく望むものではないかもしれません)は次のとおりです。

find /wherever -type f -name '*.log' -size +4096 -print \
    | xargs truncate --size 0

+4096は、ファイルに512バイトの4096を超えるセクタがあることを意味します。問題は、これがプロセスがアクティブに記録されているログファイルである場合、そのプロセスがファイル内のその場所を保持することです。ディスク領域を回復できますが(ファイルシステムがほとんどのファイルシステムがサポートするスパースファイルをサポートしていると仮定します)、ログを見ると最初はブロックがゼロです。したがって、これを実行したらすぐにデーモンを再起動する必要があります。あるいは、ファイルを邪魔にならない場所に移動してデーモンを再起動する方が良いでしょう。

cd /wherever
find . -name '*.log' -maxdepth 1 -size +4096 -exec mv {} {}.old \;
systemctl restart yourservice (or whatever you need to restart)
rm -f *.old

おすすめ記事