Linux

/YEAR/MONTH 文件夾結構中的日誌文件,如何正確刪除舊日誌?

  • March 7, 2018

我的情況是我們將日誌文件保存在 /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.

引用自:https://serverfault.com/questions/900420