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.

相关内容