如何创建一个 cron 作业来自动删除超过 30 天的文件?

如何创建一个 cron 作业来自动删除超过 30 天的文件?

我正在使用 Ubuntu 14 桌面版。我使用这台机器来备份其他机器,并将其作为安全摄像头的 FTP 服务器。

我需要创建一个 cron 作业,自动删除超过 30 天的文件。我进行了一些搜索,我想我找到了正确的命令,但在执行它之前我想确保我没有遗漏任何东西。

* 4 * * * find /home/USER/DIRECTORY1/DIRECTORY2/ -mindepth 1 -type f -mtime 29 -delete

我需要在 find 命令前面加上“sudo”吗?

我需要在天数“29”前面加上“+”吗?

答案1

我使用一个来删除超过 10 天的备份,它看起来像这样:

50 17 * * * find /path/to/files/filename* -type f -mtime +10 | xargs rm

我使用它们是filename*因为它们用于备份所以它们看起来像这样:

filename04-04-2018.tar.gz
filename04-05-2018.tar.gz
filename04-06-2018.tar.gz

答案2

首先,将find ...命令放入脚本中bash,然后从 调用该脚本crontab。如果您有加密的主目录 ( cat /home/.ecryptfs/$USER/.ecryptfs/Private.mnt),则必须将脚本存储在$HOME目录树之外。将命令保存在 中crontab会使配置、记录和调试变得更加困难,并且crontab命令解析器不如 那样聪明bash

第二,在考虑之前,总是、总是、总是find用进行测试-print,并使其发挥作用-delete

第三,find测试“ -mtime 29”表示find“查找文件的,如果与 相等则mtime返回。您应该使用,它将被视为“ ”,这就是您想要的。来自: True29-mtime +29findmore than 29man find

   Numeric arguments can be specified as

   +n     for greater than n,

   -n     for less than n,

   n      for exactly n.

第四,确保您对 中的目录具有写权限/home/USER/DIRECTORY1/DIRECTORY2/

第五,你的意思是/home/USER/DIRECTORY1/DIRECTORY2//home/$USER/DIRECTORY1/DIRECTORY2/?如果$USER是用户的用户 ID,则会出现问题:在运行时环境中cron未定义。它确实定义了,因此您可以使用。$USER$HOME$HOME/DIRECTORY1/DIRECTORY2

相关内容