現在のログファイルを除くすべてのログファイルの削除

現在のログファイルを除くすべてのログファイルの削除

私のsipサーバーは毎時間3つのログファイルを生成します。

Progress-23May2017-10-00hrs.log Call-23May2017-10-00hrs.log Error-23May2017-10-00hrs.log

したがって、現在の時刻ログを除く他のすべてのログファイルを削除する必要があります。このコマンドを試してみました。

 find . -type f -name "*-23May2017-10-00hrs.log" -print

現在時刻の3つのログファイルを印刷します。

したがって、このコマンドを試して、ファイルが現在の時刻ログと一致しないことを確認します。

find . -type f -name "!(*-23May2017-10-30hrs.log)" -print

それは私には何も与えません。

他のログファイルをどのように削除しますか?

答え1

find /home/fi -maxdepth 1 -iname log\* -type f -mmin +1800 | sort | head -n -1 | xargs rm

答え2

まず、照会がエスケープされないため、ワイルドカードが*変換されます。これを防ぐには、バックスラッシュを使用するか、\単一引用符を使用します。'

だから: find . -type f -name '*-23May2017-10-00hrs.log' -print うまくいきます。

実際の問題に戻ってこの問題を解決する方法はいくつかあります。まず、find-mtime機能を使用して、x分前に最後に変更されたすべてのファイルを受信できます。 SIPサーバーがログインしていると仮定/var/log/sip/

find /var/log/sip/ -type f -name '*.log' -mmin +$((24*60)) -print 24 * 60分(1日)前に最後に変更されたファイルで終わるすべてのファイルが.log表示されます。

ただし、ログを処理するためのツールを使用することもできますlogrotate

logrotateはすべての主要なUNIXディストリビューションで利用でき、ファイルを一度に圧縮して他のファイルの前に削除するなどの操作を実行できます。機能リストが長い。インストールは簡単でデーモンとして実行され、追加のcronjobを扱う必要はありません。

私の提案はlogrotateを使用することです。その単純さを見てください:https://linux.die.net/man/8/logrotate

関連情報