Существуют некоторые файлы журнала, созданные через определенное время с отметкой времени.
/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 дней, а старые журналы должны быть удалены. Количество файлов журнала, создаваемых ежедневно, варьируется. Как этого добиться?
Вы можете сделать с mtime
(время изменения) в команде find
.
find /mylog/path -mindepth 1 -mtime +5 -delete
-mindepth 1
означает обрабатывать все файлы, кроме аргументов командной строки. -mtime +5
проверит файлы, измененные 5 дней назад. Так как в вашей находке нет опции -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
Если вы всегда хотите удалить файлы журналов по истечении пяти дней, но по какой-то причине не хотите использовать logrotate
вы можете использовать cron
( crontab -e
для редактирования crontab), чтобы ежедневно запускать следующий скрипт:
olddate=$(date --date="5 days ago" +%Y-%m-%d) && rm "/mylog/path/Log_file_$olddate-*"