Удалить все файлы журнала, кроме текущего файла журнала.

Удалить все файлы журнала, кроме текущего файла журнала.

Мой SIP-сервер генерирует 3 файла журнала каждый час:

Progress-23May2017-10-00hrs.log Call-23May2017-10-00hrs.log Error-23May2017-10-00hrs.log

Поэтому мне нужно удалить все остальные файлы журнала, кроме журнала текущего часа. Я попробовал с помощью этой команды

 find . -type f -name "*-23May2017-10-00hrs.log" -print

он распечатал три файла журнала моего текущего времени.

поэтому, когда я попробовал эту команду для проверки файлов, не соответствующих текущему времени, журнал.

find . -type f -name "!(*-23May2017-10-30hrs.log)" -print

это мне ничего не дает.

Как удалить другие мои файлы журналов?

решение1

find /home/fi -maxdepth 1 -iname log\* -type f -mmin +1800 | sort | head -n -1 | xargs rm

решение2

Во-первых: ваши процессы поиска не экранируются, поэтому подстановочные знаки *преобразуются. Чтобы предотвратить это, вы можете использовать обратные косые черты \или одинарные кавычки'

Итак: find . -type f -name '*-23May2017-10-00hrs.log' -print должно работать нормально.

Возвращаясь к вашим реальным вопросам: есть несколько способов решить эту проблему. Во-первых, вы можете использовать -mtimeфункцию find, чтобы просто прослушать каждый файл, последняя модификация которого произошла x минут назад. Предположим, что ваш sip-сервер регистрирует данные в/var/log/sip/

find /var/log/sip/ -type f -name '*.log' -mmin +$((24*60)) -print покажет вам все файлы, заканчивающиеся на .log, и последний раз измененные 24*60 минут (1 день) назад.

Однако вы также можете использовать инструмент, который создан для обработки журналов, и это logrotate.

logrotate доступен во всех основных дистрибутивах unix и позволяет сжимать файлы определенного возраста, удалять их в другой возраст и т. д. Список функций довольно длинный. Он прост в установке, работает как демон, и вам не нужно возиться с дополнительными cronjobs.

Мои предложения — использовать logrotate. Проверьте его простоту на:https://linux.die.net/man/8/logrotate

Связанный контент