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

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

私の SIP サーバーは、1 時間ごとに 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.logで終わり、最終変更が 24*60 分 (1 日) 前である すべてのファイルを表示します。

ただし、ログ処理用に作成されたツールを使用することもできますlogrotate

logrotate は主要な UNIX ディストリビューションで利用でき、特定の期間にファイルを圧縮したり、さらに古い期間にファイルを削除したりすることができます。機能リストはかなり長いです。インストールは簡単で、デーモンとして実行され、追加の cronjobs をいじる必要はありません。

私の提案は、logrotate を使用することです。そのシンプルさを以下で確認してください。ログローテーション

関連情報