如何删除超过一天的文件夹? (Cron Job)

时间:2014-03-14 07:12:19

标签: linux command-line cron

我想删除主机上的文件夹及其内容,如果它超过一天。问题是我没有使用linux cron作业如何做到这一点的经验。我还应该说,我已经看过谷歌并没有出现任何问题。我认为这是一个非常简单的问题所以请帮助我。感谢

4 个答案:

答案 0 :(得分:2)

这应该这样做:

find /path/to/dir -maxdepth 0 -ctime +1 -exec rm -fr {} +

但请注意,首先在cron之外进行测试,不要使用-exec部分,这样您就不会意外删除其他内容。

答案 1 :(得分:0)

我假设您想要在过去24小时内未更改该文件夹中的最新文件时删除包含其所有内容的文件夹。

这是一个解决方案,它可能不是最优雅的:

首先,使用此命令删除修改时间戳超过24小时的所有文件:

find /path/to/the/folder -type f -mtime +0 -print0 | xargs -0 rm

然后,尝试删除文件夹中的所有文件夹,包括文件夹本身:

find /path/to/the/folder -depth -type d -print0 | xargs -0 rmdir

这只会删除不包含任何文件的文件夹。也就是说,如果文件在第一步之后保留(因为它们的修改时间戳不超过24小时),那么您的文件夹(可能包含子文件夹)将保留。如果cronjob反复运行,那么在某个时间点 - 只要文件夹中没有小于24小时的文件 - 那么您的文件夹及其所有内容都将被删除。

您可以将其放入 /etc/cron.d/folder-cleanup 文件中,如下所示:

*/5 * * * * root find /path/to/the/folder -type f -mtime +0 -print0 | xargs -0 rm ; find /path/to/the/folder -depth -type d -print0 | xargs -0 rmdir

这样,您的清理过程将每5分钟运行一次。

这种方法的缺点是你的文件夹会逐步消失。我不确定这是否是你需要的。

答案 2 :(得分:0)

首先看看哪些文件将被删除:

find /path/to/dir -type d -mtime +1 -print

然后准备执行:

find /path/to/dir -type d -mtime +1 -print0 | xargs -0 rm -r

答案 3 :(得分:0)

我有一个稍微不同的建议,其他人可能会觉得有用。我想清除我的 ~/Downloads 文件夹中超过 1 天的文件和目录,但我想将它们发送到垃圾箱。我想每隔 180 天自动清空一次垃圾箱,仅在重新启动时自动清空。

用户:crontab -e

0 0 * * * find /home/username/Downloads -mindepth 1 -mtime +1 -exec gio trash {} \;

根:sudo crontab -e

@reboot find /home/username/.local/share/Trash/expunged/ -type f -mtime +180 -exec rm {} \;
@reboot find /home/username/.local/share/Trash/files/ -type f -mtime +180 -exec rm {} \;
@reboot find /home/username/.local/share/Trash/info/ -type f -mtime +180 -exec rm {} \;