我正在使用 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
返回。您应该使用,它将被视为“ ”,这就是您想要的。来自: True
29
-mtime +29
find
more than 29
man 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