4

В CentOS 6 Linux я использую date +%a в нескольких cronjobs и сценариях для генерации имен файлов журналов, таких как myprog-Tue.txt и это хорошо работает для меня уже много лет.

Но теперь для одной программы мне нужно удалить предыдущие файлы журналов, то есть в моем cronjob, прежде чем я запустил свою программу и перенаправил ее вывод в myprog-Tue.txt , я хотел бы удалить myprog-Wed.txt .

Таким образом, я хотел бы убрать старые лог-файлы с моего пути, но у меня все еще есть 5-6 дней журналов.

Итак, я попробовал:

# date -v+1d +%a
date: invalid option -- 'v'
Try `date --help' for more information.

Кто-нибудь знает, что здесь не так, пожалуйста?

4 ответа4

11

Проблема не в том, как вы можете использовать date для вывода того, что вы хотите ... ваша проблема:

Таким образом, я хотел бы убрать старые лог-файлы с моего пути, но у меня все еще есть 5-6 дней журналов.

Итак, почему бы не использовать find чтобы удалить все файлы, кроме этой недели?

find /path/to/files/ -mtime +7 -exec rm {} \;

Кроме того, у date есть много разных реализаций - я помню, когда в последний раз я использовал ее, было довольно сложно найти нужные flags чтобы делать то, что я хотел ... и было нелегко заставить его работать одинаково между Linux и машина AIX ... так, на всякий случай этот комментарий поможет вам выбрать date :)

6

Вы бы сделали это так:

date -d "+1 days" +%a

Это делает:

Суббота

1

Используйте опцию -d чтобы указать фразу:

date -d '+ 1 day' +%a
1

Еще одна запись для "как разумно управлять файлами журналов" ....

Вы можете посмотреть на logrotate, который должен быть частью большинства дистрибутивов Linux. Он может управлять удалением и сжатием. Многие демоны Linux используют это, так что вы можете посмотреть некоторые примеры конфигурационных файлов.

Немного проще - rotatelogs, который обрабатывает часть поворота, но не делает никакого удаления (ваш find ... -delete сделал бы это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .