刪除除當前日誌檔案之外的所有日誌文件

刪除除當前日誌檔案之外的所有日誌文件

我的 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

相關內容