如何让我的系统删除某个目录中超过某个时间的所有文件,同时保持目录结构完整?

如何让我的系统删除某个目录中超过某个时间的所有文件,同时保持目录结构完整?

我的机器上有一个目录,可以将其视为我自己的tmp目录,但它在我的~目录中。我想让我的系统每 3 小时删除该目录中超过一天的所有文件(尽管保持目录结构完整,但仍会递归删除目录中所有级别的所有文件)。

我正在运行带有 GNOME 3.18 的 Ubuntu GNOME 15.10,可以这样做吗?如果可以,怎么做?我希望这完全自动化,不需要用户交互。这应该是我登录时自动启动的,所以我不需要在每次启动时运行某些东西。

答案1

使用find

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp是要递归搜索的目录,请相应地更改此目录

  • -type f将仅查找文件

  • -mtime +0如果文件最后一次修改是在一天或更久以前,则将匹配该文件

  • -delete将只删除匹配的文件

这里的陷阱是-mtime +0,大多数人可能会想到使用-mtime +1,但find在计算天数时会忽略任何分数时间。因此,-mtime +1如果上次修改至少在 2 天前进行,则会匹配文件。

引用man find-mtime具有与 相同的时间约定-atime

-atime n

文件最后一次被访问是在 n*24 小时前。当 find 计算出文件最后一次被访问是在多少个 24 小时前时,小数部分会被忽略,因此要匹配 -atime +1,文件必须至少在两天前被访问过。

还要注意,如果您追求精确度,您应该考虑以分钟为单位指示时间-mmin的选项。find

要在 3 小时后定期运行它,您可以添加一个cron条目。

运行crontab -e并添加:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

使用zsh以下方法删除文件:

rm ~/tmp/**/*(.-m+0)

添加到cron

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'

答案2

您应该能够/home/username/directory使用以下命令删除所有超过 1 天的文件及其下的所有目录:

find /home/username/directory -type f -mtime +1 -delete

并且每三小时安排一次该命令,将其设置为 cron 作业:

crontab -e

然后在 crontab 里面:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

每三小时的整点(即第 0 分钟)运行一次命令,因此是凌晨 3:00、早上 6:00 等等。

请访问croncrontab manpages获取有关它们的更多信息。

相关内容