タイムスタンプとともに、特定の時間以降に生成されるいくつかのログファイルがあります。
/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 +5
5日前に変更されたファイルを確認してください。-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
できます。cron
crontab -e
olddate=$(date --date="5 days ago" +%Y-%m-%d) && rm "/mylog/path/Log_file_$olddate-*"