
Мне нужно удалить файлы старше 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.