Удаление старых файлов журнала

Существуют некоторые файлы журнала, созданные через определенное время с отметкой времени.

/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-*"