私の 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 を使用することです。そのシンプルさを以下で確認してください。ログローテーション