我想创建最大大小为 500MB 的目录。该目录可以包含任意数量和深度的子目录。
当目录的大小超出上限时,我想清除目录中最后访问的文件,直到其大小回到上限以下。理想情况下,清除操作期间会清除空目录。
这不需要实时发生 - 即,如果目录超过最大值也没关系,只要定期清除即可。
我探索了几个选项。我可以将文件夹安装为单独的文件系统并quota
在其上运行,但这对智能清除旧文件没有帮助。我研究了(误)使用logrotate
这种方法,但它不能很好地处理无限递归,也没有从最旧的文件开始清除的功能。
既然没有更好的建议,我的计划是复习一下我的 bash 技能,编写一个脚本,通过 检查目录大小du -s
,如果发现目录大于最大值,则递归查找目录中的所有文件,按访问日期排序(最早的优先),然后逐个删除,检查目录大小,并在目录回到目标下时退出。此脚本可以作为 cron 作业运行。
我只是想知道我是否忽略了可以更轻松地处理此问题的现有工具或策略。
(如果你好奇我为什么问这个问题,我用的是s3fs在本地文件系统上挂载 Amazon S3 存储桶,我正在研究使用 use_cache 选项来维护本地缓存。由于 S3 存储桶可能会变得非常大,因此我需要一种智能地管理此缓存的方法。)
编辑: tmpreaper
是我刚刚发现的另一个非常接近完成这项工作的工具。它似乎只能根据访问时间(而不是大小限制)清理文件夹,但在其他所有方面,它似乎是一个不错的选择。
答案1
您所需要的只是使用这里发布的脚本(http://ubuntuforums.org/showthread.php?t=698649)。你只需要定义$TrashPath。