私の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