用于删除超过 3 天的文件的 Cron 作业

Kin*_*rog 23 cron shell-script timestamps rm files

我需要使用 3 个不同目录中的 cron 作业删除超过 3 天的文件。(这 3 个目录是父目录/a/b/c/1& /a/b/c/2& 的子目录/a/b/c/3)可以用 crontab 中的一行来完成吗?

Gra*_*eme 28

这很容易(尽管请注意,这需要超过 3 天前的修改时间,因为创建时间仅适用于使用特殊工具的某些文件系统):

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete
Run Code Online (Sandbox Code Playgroud)

取出#的前-delete一旦你确定它就是找到你要删除的文件。

要让它由 cron 运行,我可能只需要创建一个可执行脚本(#!bin/sh在文件的第一行添加一个 shebang -并使其可执行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 {} +
Run Code Online (Sandbox Code Playgroud)

#当您确定您拥有正确的文件时,再次删除。

更新2

引用Stéphane Chazelas 的评论如下:

请注意,-exec rm {} +具有竞争条件漏洞-delete(如果可用)没有。所以不要在其他人可写的目录上使用它。一些发现还可以-execdir缓解这些漏洞。

  • 大括号扩展是 csh 的一项功能,也受 ksh、bash、zsh 和 fish 支持,因此您可以选择多种 shell。`ksh`、`bash` 和 `zsh` 在它们的 glob 中也有交替操作符。请注意,`-exec rm {} +` 具有“-delete”(如果可用)没有的竞争条件漏洞。所以不要在其他人可写的目录上使用它。一些发现还有一个“-execdir”,可以缓解这些漏洞。 (2认同)

Bar*_*man 9

你会更好地使用 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.
Run Code Online (Sandbox Code Playgroud)

  • `tmpwatch` 已经分叉为 `tmpreaper`,它(至少在 Debian 上)似乎是它的替代品。 (2认同)