Удаление старых файлов linux по маске чаще всего осуществляется следующим образом:
Веб-сервер указан для примера. Синтаксис очень прост — команда принудительно удалит все файлы с расширением .log в указанном каталоге, при этом удаление будет рекурсивным(-r — recursive) и подтверждения система при этом спрашивать не будет (-f — force).
При удалении таким образом очень большого количества файлов из определенного каталога может выдавать ошибки — причина в том, что система на самом деле не видит маски и разворачивает передаваемое ей выражение — срабатывает ограничение на количество аргументов, и выполнение команды прекращается.
Если rm -rf не помогает — удалять файлы следует в цикле for. Для каждого файла будет отдельная операция удаления и никаких ограничений системы здесь ожидать не приходится.
Синтаксис в простейшем случае может выглядеть так:
for f in /var/log/apache2/*.log; do rm «$f»; done
В цикл for можно добавить любую дополнительную логику.
Удаление старых файлов в Linux по Cron
Логи или другие файлы (сессии РНР) можно удалять как используя циклы (так приходится делать обычно если логов или других файлов накопилось действительно очень много), но если система не запущена или только создается лучше использовать регулярно выполняемое задание Cron, согласно которому с заданной периодичностью будут удаляться файлы определенных типов
# m h dom mon dow command
23 3 * * * find /var/www/web/sites/server-gu.ru/www/var/session/ -type f -mtime 7 -exec rm -f <> ;
В примере удаляются сессии РНР для сайта старше 7 дней.

В цикле то же самое можно сделать так:
for f in /tmp/logs/*.log
find $f -mtime +7 -exec rm <> ;
Приведенное выражение, как и любой другой цикл можно поместить в файл, сделать его исполняемым и с тем же успехом выполнять по Cron
Нужно каждые 6 часов чистить заданную папку от файлов. Нигде не могу найти решение. До этого с кроном не работал
3 ответа 3
команда оболочки для удаления файлов в каталоге (если в этом каталоге нет вложенных каталогов):
вот эту команду и надо выполнять, указав её периодичность. т.е., для «раз в шесть часов» строчка в файле crontab должна выглядеть примерно так:
т.е., в 0 минут каждые шесть часов (второе поле — */6 ) каждый день месяца (третье поле — * ) каждый месяц (четвёртое поле — * ) независимо от дня недели (пятое поле — * ) выполнять команду rm . (последнее, шестое поле).
Блог посвященный системному администрированию
19 июл. 2013 г.
Удаление старых файлов одной командой в Linux
С помощью команды find легко удалять или перемещать или копировать файлы, с датой модификации старше заданной. Удобно помещать такую команду в cron.
Например, для файлов старше 5 дней:
find /path/to/files* -mtime +5 -exec rm <> ;
Для файлов, измененных в пределах 24. 48 часов:
find /path/to/files* -mtime 1 -exec rm <> ;
Это версия для Debian, на RHEL надо писать чуть по-другому:
find /path/to/files* -mtime +0 -exec rm <> ;
Создать файлы для тестирования можно командой (например, дата 2 апреля):