Автоочистка папки: удаление старых файлов с помощью find
Зачем это нужно
Если вы храните временные файлы на рабочем столе или в любой другой папке и забываете их удалять, папка быстро заполняется ненужными элементами. Ручная очистка утомительна. Команда find позволяет автоматически находить старые файлы и удалять их по расписанию.
Базовая команда
Основной приём — использовать find с критериями по времени и действием через -exec. Общая форма команды:
find /path/to/directory -type f -mtime +N -exec rm -f {} \;Где:
- /path/to/directory — абсолютный путь к папке;
- -type f ограничивает поиск файлами (не директориями);
- -mtime +N — файлы старше N дней (см. ниже альтернативы);
- -exec rm -f {} \; — удалить каждый найденный файл (в GNU find можно использовать -delete).
Пример: удалить файлы в Pictures старше 1 дня:
find /home/damien/Pictures -type f -mtime +1 -exec rm -f {} \;Важно: перед реальным удалением сначала выполните команду без -exec, чтобы увидеть список файлов:
find /home/damien/Pictures -type f -mtime +1 -printПояснение критериев времени и опций
- -mtime — критерий в днях, целые числа. +5 — более 5 дней, -5 — 5 или менее дней, 5 — ровно 5 дней.
- -mmin — критерий в минутах (полезно для более частых проверок).
- Комбинация “+5 -10” в терминах find должна реализовываться через логические выражения (см. примеры).
- -delete — альтернативный вариант удаления, быстрее и чище, но не поддерживается во всех реализациях find.
Пример диапазона (более 5 дней и менее 10 дней):
find /path -type f -mtime +5 -a -mtime -10 -printБезопасность и рекомендации
Важно: всегда проверяйте результаты команд без удаления. Используйте -print или перенаправьте вывод в файл для ревью.
- Делайте резервные копии важных папок прежде чем запускать массовое удаление.
- Отдавайте предпочтение точным путям и -type f, чтобы не удалить директории или системные файлы.
- Если используете -exec, экранируйте точку с запятой как \; в скриптах и документах.
Дополнительные варианты действий
- Вместо rm можно использовать mv для перемещения старых файлов в архивную папку.
- Вместо find можно применять специализированные утилиты: tmpreaper, tmpwatch (для временных директорий).
- Для большого количества файлов стоит использовать xargs для повышения эффективности:
find /path -type f -mtime +30 -print0 | xargs -0 rm -fАвтоматизация процесса
Ниже приведены три распространённых подхода: автозагрузка, cron и systemd timer.
1. Запуск при входе в систему
Создайте скрипт, например в домашней папке: «find-and-delete».
#!/bin/bash
find /path/to/directory -type f -mtime +N -exec rm -f {} \;Сделайте файл исполняемым (в проводнике или через chmod +x). В GNOME добавьте его в Приложения при запуске.

2. Cron
Откройте crontab для текущего пользователя:
crontab -eСтрока crontab имеет структуру:
минуты часы день-месяца месяц день-недели командаЧтобы запускать скрипт каждый час в начале часа, добавьте:
0 * * * * /path/to/find-and-delete
Сохраните и выйдите. Cron запустит задачу от имени вашего пользователя.
3. systemd timer (рекомендуется на современных дистрибутивах)
systemd таймеры дают гибкость и удобные логи. Создайте два файла в ~/.config/systemd/user/:
Файл сервиса ~ /home/USER/.config/systemd/user/find-and-delete.service
[Unit]
Description=Find and delete old files
[Service]
Type=oneshot
ExecStart=/home/USER/find-and-deleteФайл таймера ~ /home/USER/.config/systemd/user/find-and-delete.timer
[Unit]
Description=Run find-and-delete hourly
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.targetАктивируйте таймер:
systemctl --user enable --now find-and-delete.timerGnome Schedule
Если терминал пугает, Gnome Schedule — графический планировщик заданий для похожих задач.

Тестовые сценарии и критерии приёмки
- Тест 1: dry-run — команда выводит ожидаемый список файлов без удаления.
- Тест 2: мелкая выборка — поместите 3 файла с разными датами и убедитесь, что удаляются только нужные.
- Тест 3: разрешения — скрипт выполняется от целевого пользователя и не затрагивает системные каталоги.
Критерии приёмки:
- Скрипт удаляет только файлы старше указанного порога.
- Нет удаления директорий или скрытых системных файлов.
- Логи (cron или systemd) показывают успешные запуски и ошибки.
Риски и способы их снижения
- Риск: непреднамеренное удаление важных данных. Митигатор: dry-run и резервные копии.
- Риск: запуск от root удалит всё. Митигатор: запускать от обычного пользователя и проверять путь.
- Риск: несовместимость опций find. Митигатор: проверить man find на целевой системе.
Быстрая шпаргалка (cheat sheet)
- Найти файлы старше 7 дней: find /path -type f -mtime +7 -print
- Удалить файлы старше 30 минут: find /path -type f -mmin +30 -exec rm -f {} \;
- Перенести файлы старше 14 дней: find /path -type f -mtime +14 -exec mv {} /archive/location/ \;
Роль‑ориентированные чек‑листы
Для рядового пользователя:
- Подготовить папку для тестирования.
- Запустить dry-run.
- Применить cron или GUI.
Для администратора:
- Проверить права доступа и owner каталога.
- Настроить systemd таймеры с логированием.
- Обеспечить резервное копирование критичных данных.
Короткое резюме
- find — надёжный инструмент для удаления старых файлов.
- Обязательно тестируйте перед удалением и используйте абсолютные пути.
- Для регулярных запусков используйте cron или systemd‑таймеры.
FAQ
Q: Чем -mmin отличается от -mtime? A: -mmin считает минуты, -mtime — дни. -mmin полезен для частых проверок.
Q: Можно ли использовать -delete вместо -exec rm? A: Да, но -delete не поддерживается во всех сборках find; проверьте man find.
Q: Как избежать удаления директорий? A: Указывайте -type f чтобы искать только файлы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента