Как систематизировать удаление старых файлов в Убунту


Удаление старых файлов в Убунту

В статье «Scrot или вариант для контроля за пользователем» я описывал вариант слежения за пользователем при помощи полезной команды для создания скриншотов — scrot. Но если не чистить папку со созданными скриншотами, то совсем скоро место на жестком диске начнет катастрофически уменьшаться. Но выход есть!

На помощь нам придут утилиты: find и cron. Чтобы удалить файлы, которые созданы, например 30 дней назад, нужно выполнить команду:



find /home/user/snapshot -mtime +30 -type f -exec rm -rf {} \;

Разберем некоторые элементы этой команды:

/home/user/snapshot — каталог, в котором нужно производить поиск;
-mtime +30 — удаляем файлы созданные больше 30 дней назад;
-type f — ключ, который указывает, что искать и удалять будем файлы, а не каталоги;
-exec rm -rf — гибкое удаление файлов или папок.

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

find /home/user/snapshot -mmin +360 -type f -exec rm -rf {} \;

-mmin +360 — удаляем файлы созданные более 360 минут назад.

Создадим скрипт. Для этого в текстовом редакторе напишем следующий текст:

#!/bin/bash
while true;
do
find /home/user/snapshot -mtime +30 -type f -exec rm -rf {} \;
done

Сохраним его, допустим с именем dellete_files.sh, в Домашнем каталоге. Сделаем его исполняемым:

chmod +x путь к скрипту dellete_files.sh

Теперь добавим задание в cron. Как это делать можно узнать из статьи «Cron — планируем задания в Убунту».

Команда может иметь следующий вид:

0 12 * * 1 путь к скрипту dellete_files.sh

А если подробнее, то файлы будут удаляться в 12 часов дня по пятницам. Если нужно выполнять очистку при каждой загрузке системы, то команда будет следующей:

@reboot root путь к скрипту dellete_files.sh

Но можно просто добавить скрипт в автозагрузку.


Как систематизировать удаление старых файлов в Убунту: 2 комментария

  1. #!/bin/bash
    while true;
    do
    find /home/user/snapshot -mtime +30 -type f -exec rm -rf {} \;
    done

    не завершает цикл. В чём ошибка? Не могу понять.

  2. Всё дело в — while true!
    Так нельзя делать, просто зацыклили процесс.
    Необходимо думать как написать скрипт через другой цыкл либо по-другому.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *