В статье «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
Но можно просто добавить скрипт в автозагрузку.
#!/bin/bash
while true;
do
find /home/user/snapshot -mtime +30 -type f -exec rm -rf {} \;
done
не завершает цикл. В чём ошибка? Не могу понять.
Всё дело в — while true!
Так нельзя делать, просто зацыклили процесс.
Необходимо думать как написать скрипт через другой цыкл либо по-другому.