Гид по технологиям

Автоматическое удаление старых файлов в папке

5 min read Linux Обновлено 07 Nov 2025
Автоматическое удаление старых файлов
Автоматическое удаление старых файлов

Как это работает (коротко)

Команда find просматривает дерево каталогов и выбирает файлы по критериям (возраст, тип, права и т. п.). Параметр -mtime ищет файлы по возрасту в днях, а -mmin — в минутах. После выбора можно выполнить команду на каждом найденном файле через -exec или воспользоваться опцией -delete.

Определения:

  • mtime: возраст файла по модификации в днях.
  • mmin: возраст файла по модификации в минутах.

Пример правильной команды

Ниже — рабочий и безопасный базовый пример, который находит обычные файлы (не каталоги) и удаляет их, если им более 1 дня:

find /home/damien/Pictures -type f -mtime +1 -exec rm -f {} \;

Пояснения:

  • /home/damien/Pictures — абсолютный путь к папке. Всегда используйте полный путь.
  • -type f — ограничивает результат только обычными файлами.
  • -mtime +1 — файлы старше 1 дня. Знак + означает «более чем». Знак - означает «менее или равно».
  • -exec rm -f {} \; — выполняет rm -f для каждого найденного файла.

Альтернативы:

  • Быстрый и безопасный просмотр (без удаления):
find /home/damien/Pictures -type f -mtime +1 -print
  • Использование встроенного удаления (короче):
find /home/damien/Pictures -type f -mtime +1 -delete

Замечание: -delete выполняет удаление на месте, поэтому сначала протестируйте через -print.

Более безопасные варианты и тестирование

Important: Никогда не выполняйте удаление без предварительной проверки. Рекомендуемые шаги:

  1. Запустите команду с -print или -ls, чтобы увидеть список файлов.
  2. Протестируйте фильтры по маске, типу и глубине (см. -maxdepth).
  3. При необходимости используйте интерактивное удаление: -exec rm -i {} \; — потребует подтверждение для каждого файла.
  4. Рассмотрите перенос в корзину вместо мгновенного удаления (см. раздел «Перемещение в корзину»).

Пример «сухого прогона» с подробностями и ограничением глубины:

find /home/damien/Pictures -maxdepth 1 -type f -mtime +1 -ls

Параметры времени и синтаксис

  • mtime: целые дни. +5 = больше 5 дней, -5 = 5 дней или меньше.
  • mmin: минуты. +60 = больше 60 минут.
  • Комбинации интервалов: для файлов старше 5 и младше 10 дней используйте логическое сочетание через два вызова find или проверяйте через -newermt/! -newermt. Пример с touch для интервала:
# Создаём временные метки
touch -d "10 days ago" /tmp/older
touch -d "5 days ago" /tmp/newer
# Находим файлы между 5 и 10 днями
find /path/to/dir -type f ! -newer /tmp/newer -newer /tmp/older -print

Перемещение в корзину вместо удаления

Для дополнительной безопасности можно не удалять, а перемещать файлы в корзину (Trash). На десктопных системах это можно делать через утилиты, например gio или gvfs-trash:

# Переместить найденные файлы в корзину (если доступна команда gio)
find /home/damien/Pictures -type f -mtime +30 -exec gio trash {} \;

Если gio отсутствует, можно создать простой скрипт, который перемещает файлы в ~/Trash или ~/.local/share/Trash/files.

Дополнительные опции find (полезные фильтры)

  • -name “*.png” — по маске имени файла.
  • -maxdepth N — ограничить глубину поиска.
  • -mtime и -mmin — время в днях и минутах.
  • -user NAME — файлы, принадлежащие пользователю.
  • -size +10M — файлы больше 10 мегабайт.

Пример: удалить старые PNG только в корне каталога:

find /home/damien/Pictures -maxdepth 1 -type f -name "*.png" -mtime +7 -delete

Автоматизация

Есть несколько подходов для автоматического запуска: запуск при старте системы, cron, systemd timer или графические планировщики (Gnome Schedule). Ниже — инструкции для трёх распространённых способов.

1. Запуск при старте

  1. Создайте исполняемый скрипт в домашней папке, например ~/find-and-delete, с содержимым:
#!/bin/bash

# Пример: удалить файлы старше 7 дней
find /path/to/directory -type f -mtime +7 -delete
  1. Сделайте файл исполняемым:
chmod +x ~/find-and-delete
  1. Откройте файловый менеджер, перейдите в домашнюю папку, щёлкните правой кнопкой по файлу find-and-delete, выберите Свойства → Права доступа и отметьте «Разрешить выполнение файла как программы».

Изменение прав файла на исполнение

  1. Откройте «Приложения при запуске» (Startup Applications) и добавьте новый элемент, указывая полный путь к ~/find-and-delete.

Note: На многих дистрибутивах предпочтительнее создать .desktop файл в ~/.config/autostart.

2. Cron

Для регулярного запуска используйте crontab. Откройте crontab для текущего пользователя:

crontab -e

Если система предложит выбрать редактор, для nano обычно вводят 2.

Структура записи в crontab:

минуты часы день-месяца месяц день-недели команда

Запуск скрипта каждый час (в начале часа):

0 * * * * /home/username/find-and-delete

Пример для запуска раз в день в 3:30 утра:

30 3 * * * /home/username/find-and-delete

crontab пример

Сохраните (Ctrl+O) и выйдите (Ctrl+X) в nano.

3. Gnome Schedule

Если использование терминального crontab пугает, установите Gnome Schedule и создайте задачу через графический интерфейс. Это удобно для пользователей рабочего стола.

Gnome Schedule — планировщик задач

Альтернативы: systemd timer

Для современных систем рекомендуется использовать systemd timer: он надёжен, даёт логи и лучше управляется.

Минимальный пример:

  1. Создать файл юнита службы: ~/.config/systemd/user/find-and-delete.service
[Unit]
Description=Delete old files in Pictures

[Service]
Type=oneshot
ExecStart=/home/username/find-and-delete
  1. Создать таймер: ~/.config/systemd/user/find-and-delete.timer
[Unit]
Description=Run find-and-delete every day

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Затем запустить и включить таймер:

systemctl --user daemon-reload
systemctl --user enable --now find-and-delete.timer

systemd даёт журналы через journalctl –user -u find-and-delete.service.

Контрольный список перед включением автоматизации

  • Протестировать команду с -print или -ls.
  • Убедиться в правильности абсолютного пути.
  • Ограничить -maxdepth, если нужно.
  • Подумать о переносе в корзину вместо удаления.
  • Настроить уведомления или логи (stdout → файл).

Критерии приёмки

  1. Скрипт выполняется вручную и выводит ожидаемый список файлов при dry-run.
  2. После включения в cron/systemd задача выполняется по расписанию и не удаляет лишних файлов.
  3. Логи доступны и содержат информацию о запусках и ошибках.

Частые ошибки и как их избежать

  • Ошибка: запуск find без -type f приведёт к попытке удалить каталоги. Решение: добавьте -type f.
  • Ошибка: использование относительных путей. Решение: используйте абсолютные пути.
  • Ошибка: отсутствие экранирования символов в -exec. Помните про последовательность \;.
  • Ошибка: отсутствие тестового прогона. Всегда сначала -print.

Краткая сводка

Используйте find с -type f и -mtime/-mmin для выборки старых файлов. Сначала выполните dry-run с -print или -ls. Для автоматизации используйте cron, systemd timer или автозапуск. При желании перемещайте файлы в корзину вместо немедленного удаления.

1‑строчный глоссарий

  • find: утилита для поиска файлов в дереве каталогов.
  • -mtime/-mmin: возраст файла в днях/минутах.
  • -exec: выполнить команду для каждого найденного файла.
  • cron/systemd: планировщики задач.

Соблюдайте осторожность и всегда проверяйте список файлов перед удалением.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Троян Herodotus: как он работает и как защититься
Кибербезопасность

Троян Herodotus: как он работает и как защититься

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти