如何删除一天前的文件夹?(计划任务)

9

如果一个文件夹超过一天,我希望能够在我的主机上删除它及其内容。问题是我不知道如何使用Linux Cron Job来实现这一点。我已经查看了谷歌,但没有找到相关的信息。我认为这是一个相当简单的问题,请帮帮我。谢谢。


可能是重复的问题:-mtime文件早于1小时 - paxdiablo
1
这是针对文件而非文件夹的。 - Joe Scotto
然后您使用-type d而不是-type f。底线是,您正在查看find -mtime ... - paxdiablo
如果我执行 find /path/to/files* -type d -mtime +5 -exec rm {} \;,这会删除文件夹及其内容吗? - Joe Scotto
1
不,你必须使用 rm -rf - paxdiablo
4个回答

8
这应该可以解决问题:
find /path/to/dir -maxdepth 0 -ctime +1 -exec rm -fr {} +

但是要小心,先在之外测试一下,不要带上-exec参数,以免误删其他文件。


我需要修改哪个部分来更改天数?是 +1 部分吗?另外,这是在 Web 服务器上运行的。 - Joe Scotto
我正在使用cpanel,对于目录,类似于public_html/website/uploads吗? - Joe Scotto
有没有任何网站可以让我了解更多关于这个?我现在非常感兴趣。 - Joe Scotto
另外,如果超过一分钟或几秒钟,我是否有办法删除它? - Joe Scotto
如果你有Linux/UNIX/Mac电脑,可以在man find中读取相关信息。或者访问这个网站:http://www.linuxmanpages.com/man1/find.1.php - janos
显示剩余7条评论

2

首先查看将要被删除的文件:

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

当准备好执行时:

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

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分钟运行一次。

这种方法的缺点是您的文件夹会逐步消失。我不确定这是否符合您的需求。


它通过电子邮件向我发送了以下内容:find: /public_html/kronofiles.com/uploads/1/': 没有那个文件或目录 rmdir: 缺失操作数 尝试'rmdir --help'以获取更多信息。 - Joe Scotto
你能运行 find /public_html/kronofiles.com/uploads/1/ 并将输出粘贴到 http://pastebin.com/ 上,然后告诉我 Pastebin 链接吗? - Manuel Kießling

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 {} \;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接