我的机器上有一个目录,可以将其视为我自己的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 等等。
请访问cron
并crontab
manpages
获取有关它们的更多信息。