Linux
/YEAR/MONTH 文件夾結構中的日誌文件,如何正確刪除舊日誌?
我的情況是我們將日誌文件保存在 /YEAR/MONTH/ 文件夾結構中,例如 /2018/03/fakelog.tmp.gz
我希望每月執行一次 cronjob 來刪除超過一定年限的文件,而不是使用說 find 我想可以利用這種結構來提高效率(使用 find -mtime it將需要很多分鐘才能執行)。
我敢肯定,很容易獲得目前日期並將年份減少,例如 2,然後刪除 /2016/03/ 中的所有內容,但隨後我們將錯過 /2014/ 或 /2016/01 中的任何內容,這可能是如果腳本被添加到不同的系統,或者出於任何原因沒有執行特定月份,則存在問題。
例如,是否有可能找到任何“小於” 2016 的文件夾,或任何“小於” /2016/03 的文件夾?或者這可以通過不涉及迭代每個組合的不同方式來解決。
謝謝你的幫助
我認為它可以用一個簡單的腳本來完成,如下所示:
#!/bin/bash start_year=2010 year=`date +%Y -d '-2 year'` mon=`date +%m -d '-2 year'` prev_year=`expr $year - 1` if [ $start_year -gt $year ]; then echo "Nothing to do" exit 0 fi for i in `seq $start_year $prev_year`; do echo "Removing year [$i]" done for i in `seq 1 $mon`; do m=$(printf '%02d' $i) echo "Removing month [$year/$m]" done
您需要將起始年份設置為“2010”,如上所示。在這裡,腳本將只顯示要刪除的文件夾。這樣可以更安全地確保並確認您刪除了您真正需要的內容。滿意後,您可以添加
rm -rf dir_name
.