Linux: как удалить файлы старше N дней командой find

Категория: Bash · Язык: Bash · Обновлено:

Чтобы удалить файлы старше 7 дней, выполните find /путь -type f -mtime +7 -delete. Перед удалением замените -delete на -print и проверьте список. Условие -mtime +7 означает «последнее изменение было больше семи полных суток назад».

Сначала посмотреть, потом удалить

Bash
find /var/log/myapp -type f -mtime +7 -print      # только показать, что будет удалено
find /var/log/myapp -type f -mtime +7 -delete     # удалить

Всегда запускайте сначала с -print. Команда -delete не спрашивает подтверждения и не отправляет файлы в корзину.

Как работает -mtime

Запись

Что означает

-mtime +7

Изменён более 7 полных суток назад, то есть 8 суток и больше

-mtime 7

Изменён ровно 7 суток назад (в пределах одних суток)

-mtime -7

Изменён менее 7 суток назад

-mmin +60

Изменён более 60 минут назад

-atime, -ctime

То же для времени последнего доступа и смены метаданных

Дробная часть суток отбрасывается, поэтому файл, которому 7 суток и 1 час, под условие -mtime +7 не попадает.

Фильтры по имени и глубине

Bash
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          # убрать пустые папки, но не саму корневую

Имена с пробелами

Если нужно передать список другой команде, разделяйте имена нулевым символом:

Bash
find /var/log/myapp -type f -mtime +7 -print0 | xargs -0 -r rm --

Запуск по расписанию

Добавьте строку в crontab -e, чтобы чистка выполнялась каждый день в 3:00:

Bash
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.