Задание Cron для удаления файлов старше 3 дней

Задание Cron для удаления файлов старше 3 дней

Мне нужно удалить файлы старше 3 дней с помощью задания cron в 3 разных каталогах. (Эти 3 каталога являются дочерними по отношению к родительскому каталогу /a/b/c/1& /a/b/c/2& /a/b/c/3). Можно ли это сделать с помощью одной строки в crontab?

решение1

Это достаточно просто (хотя следует отметить, что время изменения составляет более 3 дней назад, поскольку время создания доступно только в определенных файловых системах с помощью специальных инструментов):

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete

Удалите #перед тем -delete, как убедитесь, что он находит файлы, которые вы хотите удалить.

Чтобы запустить его по cron, я бы, наверное, просто создал исполняемый скрипт (добавил shebang - #!bin/shв верхнюю строку файла и сделал бы его исполняемым с помощью chmod a+x), затем поместил бы его в соответствующий cronкаталог, например /etc/cron.dailyили /etc/cron.weekly. Конечно, при условии, что вам не нужно более конкретное расписание и что эти каталоги существуют в вашем дистрибутиве.

Обновлять

Как отмечено ниже, -deleteвариант для findне очень переносим. Подход, совместимый с POSIX, будет таким:

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +

Снова удалите, #когда убедитесь, что у вас есть нужные файлы.

Обновление2

Цитата изСтефан Шазелас комментарийниже:

Обратите внимание, что -exec rm {} +у него есть уязвимости состояния гонки, которых -delete(где они есть) нет. Поэтому не используйте его в каталогах, которые доступны для записи другими. Некоторые находки также имеют , -execdirкоторый смягчает эти уязвимости.

решение2

Вам было бы гораздо лучше использоватьtmpwatch

tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.

Связанный контент