Linux: как удалить файлы старше N дней командой find
Чтобы удалить файлы старше 7 дней, выполните find /путь -type f -mtime +7 -delete. Перед удалением замените -delete на -print и проверьте список. Условие -mtime +7 означает «последнее изменение было больше семи полных суток назад».
Сначала посмотреть, потом удалить
find /var/log/myapp -type f -mtime +7 -print # только показать, что будет удалено
find /var/log/myapp -type f -mtime +7 -delete # удалитьВсегда запускайте сначала с -print. Команда -delete не спрашивает подтверждения и не отправляет файлы в корзину.
Как работает -mtime
Запись | Что означает |
|---|---|
| Изменён более 7 полных суток назад, то есть 8 суток и больше |
| Изменён ровно 7 суток назад (в пределах одних суток) |
| Изменён менее 7 суток назад |
| Изменён более 60 минут назад |
| То же для времени последнего доступа и смены метаданных |
Дробная часть суток отбрасывается, поэтому файл, которому 7 суток и 1 час, под условие -mtime +7 не попадает.
Фильтры по имени и глубине
find /var/log/myapp -type f -name "*.log" -mtime +30 -delete # только логи старше 30 дней
find /var/log/myapp -type f -mmin +60 -print # старше часа
find /var/log/myapp -maxdepth 1 -type f -mtime +7 -delete # без вложенных папок
find /var/log/myapp -mindepth 1 -type d -empty -delete # убрать пустые папки, но не саму корневуюИмена с пробелами
Если нужно передать список другой команде, разделяйте имена нулевым символом:
find /var/log/myapp -type f -mtime +7 -print0 | xargs -0 -r rm --Запуск по расписанию
Добавьте строку в crontab -e, чтобы чистка выполнялась каждый день в 3:00:
0 3 * * * find /var/log/myapp -type f -mtime +7 -deleteЧастые вопросы
Почему файл возрастом 7 дней не удалился при -mtime +7?
Из-за округления вниз: файл возрастом 7 суток и несколько часов считается семидневным, а не старше семи. Используйте -mtime +6 или считайте в минутах: -mmin +10080 для 7 суток.
Как удалить файлы по дате создания, а не изменения?
Классический find хранит время создания не везде. На современных системах можно использовать -newerBt: find . -type f ! -newerBt '2026-01-01' -print (GNU find 4.9 и новее).
Как удалить файлы старше N дней в Windows?
В PowerShell: Get-ChildItem C:\logs -File | Where-Object LastWriteTime -lt (Get-Date).AddDays(-7) | Remove-Item.