我的 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
它列印了我當前時間的三個日誌檔案。
所以當我嘗試此命令來驗證與當前時間日誌不匹配的文件時。
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。看看它的簡單性:https://linux.die.net/man/8/logrotate