古いログファイルの削除

古いログファイルの削除

タイムスタンプとともに、特定の時間以降に生成されるいくつかのログファイルがあります。

/mylog/path
Log_file_2018-07-19-22-55-31Z.tgz
Log_file_2018-07-20-01-29-11Z.tgz
Log_file_2018-07-20-10-36-49Z.tgz
Log_file_2018-07-21-18-26-36Z.tgz

日付に基づいて古いログを削除する必要があります。たとえば、過去5日間のログのみが必要で、古いログは削除する必要があります。毎日生成されるログファイルの数は異なります。この目標を達成する方法は?

答え1

コマンドに mtime (修正時間)を使用できます.find

 find /mylog/path -mindepth 1 -mtime +5 -delete
  • -mindepth 1コマンドラインパラメータを除くすべてのファイルが処理されることを示します。
  • -mtime +55日前に変更されたファイルを確認してください。
  • -delete削除されます

答え2

あなたの発見には対応するオプションがないので、-mtimeこれが最も簡単な方法だと思います。

#!/bin/bash
# delete every file that's between 5 and 40 days old
for i in {5..40}; do 
    olddate=$(date --date="$i days ago" +%Y-%m-%d)
    echo "Deleting files from $olddate..."
    rm "Log_file_$olddate-*"
done

もしあなたならいつも5日後にログファイルを削除したいが何らかの理由で使用したくない場合は、(crontabの編集)を使用して次のスクリプトを毎日実行logrotateできます。croncrontab -e

olddate=$(date --date="5 days ago" +%Y-%m-%d) && rm "/mylog/path/Log_file_$olddate-*"

関連情報