古いファイルを削除しますが、週/月/年ごとに1つずつ保存してください。

古いファイルを削除しますが、週/月/年ごとに1つずつ保存してください。

10分ごとにログファイルがあるフォルダがあります。

alfred_140810-190001.json
alfred_140810-191001.json
alfred_140810-192002.json
alfred_140810-193001.json
alfred_140810-194001.json
alfred_140810-195001.json
alfred_140810-200002.json
alfred_140810-201119.json
alfred_140810-202002.json
...

どうやってこれを達成できますか?

  • 1週間を過ぎたすべてのファイルを削除しますが、週に1つずつ保存してください。
  • 月が経過したすべてのファイルを削除しますが、月に1つずつ保存します。
  • 1年以上経過したすべてのファイルを削除しますが、毎年1つずつ保存してください。

rsnapshotそのため、過去4週間のファイル(4つ)、月に1つのファイル(12ファイル)、年間1つのファイル(バックアップソートと同じシステム)が必要です。

ベストアンサー1

ログを回転させたいhttp://linuxcommand.org/man_pages/logrotate8.html

すでにシステムにいる可能性があります。設定するだけです。ただし、主な目的は古いログファイルを消去することです。ログファイルを保持するように設定できるかどうかはわかりません。

あなたは何ができますか?

log、、、log.weeklyおよびlog.monthly複数のディレクトリを作成します。log.yearly

logすべてのログファイルの場所です。作る

  • logから最新のログファイルをコピーする毎週のクローンの操作log.weekly
  • 最新のログファイルをからにコピーする月間クローンlog操作log.monthly
  • logから最新のログファイルをコピーする年間のクローン操作ですlog.yearly

次に、他のディレクトリに合わせてlogrotateを設定します。

    #!/bin/bash

    NOW=$(date +%


    ls -rt1 ${LOG} | while read FILE
    do
        TVAL=$(stat --printf %W ${LOG}/${FILE})
        if [ $(ls -1 ${LOG.WEEKLY} | wc -l) ] -eq 0 ]
        then
             cp ${LOG}/${FILE} ${LOG.WEEKLY}/${FILE}
        else
             LAST_WEEKLY=$(ls -t1 ${LOG.WEEKLY} | head -n 1 | stat --printf %W)
             if [ $((${TVAL}-${LAST_WEEKLY})) -gt $((60*60*24*7)) ]
             then
                 cp ${LOG}/${FILE} ${LOG.WEEKLY}/${FILE}
             fi
        fi
   # repeat the above logic for month and year
   rm ${LOG}/${FILE} 
   done

おすすめ記事