
ファイルを圧縮して切り捨てるには、次のコマンドを使用しています。これを1つのコマンドにまとめるのに役立ちます。
find *scan*.log -type f -size +1G |xargs -L1 -I file zip file.zip file
find *scan*.log -type f -size +1G |xargs -L1 -I file truncate -s 5000 file
答え1
findで見つかった各ファイルに対して複数のタスクを実行する一般的な方法は次のとおりです。
find . -name '*scan*.log' -type f -size +1G -exec sh -c \
'for f in "$@"; do XXX "$f" ; YYY "$f" ; ZZZ "$f" ; done' \
sh {} +
これにより、sh が find に渡したファイル名ごとに、XXX、YYY、ZZZ プログラムが 1 回実行され、同じファイル名が各コマンドに順番に渡されます。
ログファイルを回転させるには、次のものが必要になる場合があります。
find . -name '*scan*.log' -type f -size +1G -exec sh -c \
'for f in "$@"; do
mv "$f" "$f.old"
pkill -1 <processname>
gzip -9 "$f.old"
done' sh {} +
<processname>
ログファイルを作成するプロセスの名前はどこにありますか?これを行うには、HUP信号でログファイルを閉じて再度開くように作成する必要があります。それ以外の場合は、プログラムに適した方法(プロセスの終了と再開を含む)を使用してください。
または、より良い方法は、logrotate
パッケージをインストールして使用することです。