Мой 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
это ничего не дало.
Как удалить другие файлы журнала?
Прежде всего: ваши процессы поиска не экранируются, поэтому подстановочные знаки *
преобразуются.
Чтобы предотвратить это, вы можете использовать обратную косую черту \
или использовать одинарные кавычки '
Итак:
найти . -type f -name '*-23May2017-10-00hrs.log' -print
должно работать нормально.
Вернемся к вашим настоящим вопросам:
Есть несколько способов решить эту проблему. Сначала вы можете использовать функцию find -mtime
, чтобы просто прослушать каждый файл, последняя модификация которого была x минут назад.
Предположим, ваш sip-сервер ведет журналы по адресу /var/log/sip/
find /var/log/sip/ -type f -name '*.log' -mmin +$((24*60)) - печать
покажет вам каждый файл, оканчивающийся на .log
и последнее изменение которого было 24*60 минут (1 день) назад.
Однако вы также можете использовать инструмент, предназначенный для обработки журналов, и это logrotate
.
logrotate доступен во всех основных дистрибутивах Unix и позволяет сжимать файлы определенного возраста, удалять их другого возраста и так далее. Список функций довольно длинный. Его легко установить, он работает как демон, и вам не нужно возиться с дополнительными cronjobs.
Я предлагаю использовать logrotate. Проверьте его простоту: https://linux.die.net/man/8/logrotate
find /home/fi -maxdepth 1 -iname log\* -type f -mmin +1800 | sort | head -n -1 | xargs rm