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

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

Это достаточно просто (хотя обратите внимание, что это время модификации более 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 {} + 

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

Update2

Чтобы процитировать комментарий Стефана Чазеласа ниже:

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

Вам будет намного лучше использовать 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.