我需要使用 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.