cronjob删除超过99天的文件

时间:2012-06-20 12:50:47

标签: linux bash cron find rm

我必须制作一个cronjob来删除特定目录中超过99天的文件,但我不确定文件名是否由值得信赖的Linux用户制作。我必须期待特殊字符,空格,斜线字符等。

以下是我认为可行的方法:

find /path/to/files -mtime +99 -exec rm  {}\;

但是我怀疑如果有特殊字符或者它找到一个只读文件(cron可能无法以超级用户权限运行),这将失败。如果遇到这样的文件,我需要它继续。

4 个答案:

答案 0 :(得分:11)

当您使用-exec rm {} \;时,空格,制表符,返回或特殊字符不会出现任何问题,因为find会调用rm命令直接并一次传递一个文件的名称。

不会使用该命令删除目录,因为您没有将-r参数传递给它,而您可能也不想这样做。这可能最终会有点危险。如果您没有写入权限,您可能还希望包含-f参数来强行执行。以root身份运行cron脚本,你应该没问题。

我唯一担心的是你最终可能会遇到一个你不想删除但在过去100天内没有被修改过的文件。例如,用于停止工作中的自动构造序列的密码。有可能该文件在过去100天内未被修改,但一旦启动了自动编码序列,您就不希望因为密码丢失而将其归咎于该文件。

好的,更合理的可能是使用但很少修改的应用程序。也许是某人的简历因为他们持有当前的工作而没有更新,等等。

所以,要小心你的假设。仅仅因为文件未在100天内被修改并不意味着它没有被使用。更好的标准(尽管仍然有问题)是文件是否在过去100天内被访问过。也许这是最后的命令:

 find /path/to/files -atime +99 -type f -exec rm -f {}\;

还有一件事......

某些find命令的-delete参数可用于代替-exec rm参数:

 find /path/to/files -atime +99 -delete

这将删除找到的目录和文件。

还有一个小建议:在第一周,保存在日志文件中找到的文件而不是删除它们,然后检查日志文件。这样,您可以确保不删除重要的内容。一旦你高兴,你不想触摸的日志文件中没有任何内容,你可以删除这些文件。一周之后,如果您不想删除任何重要的内容,您可以恢复find命令为您执行删除操作。

答案 1 :(得分:1)

如果使用rm选项运行-f,无论您是否对文件具有写入权限,您的文件都将被删除(重要的是包含文件夹)。因此,您可以删除文件夹中的所有文件,也可以不删除任何文件。如果要删除子文件夹,还要添加-r

我必须说出来:小心翼翼地非常!你正在玩火;)我建议你用file命令调试一些不那么有害的东西。

您可以通过创建一堆文件来测试这一点,例如:

touch {a,b,c,d,e,f}

并根据需要为每个人设置权限

答案 2 :(得分:1)

您应该使用-execdir代替-exec。更好的是,请阅读findutils手册中的完整Security considerations for find章节。

答案 3 :(得分:1)

请始终使用rm [opts] -- [files],这样可以避免因-rf之类的文件而导致错误,因为这些文件会被解析为选项。提供文件名时,请结束所有选项。