我的机器上有一个目录,可以将其视为自己的tmp
目录,但是它在我的~
目录中。并且我想这样做,以便我的系统每3小时删除该目录中早于一天的目录中的所有文件(尽管保持目录结构不变,但仍递归删除目录中所有级别的所有文件)。
我在GNOME 3.18上运行Ubuntu GNOME 15.10,可以做到这一点吗?如果是这样,怎么办?我希望这是完全自动化的,不需要用户交互。这应该是我登录时自动启动的,所以我不需要在每次启动时都运行。
我的机器上有一个目录,可以将其视为自己的tmp
目录,但是它在我的~
目录中。并且我想这样做,以便我的系统每3小时删除该目录中早于一天的目录中的所有文件(尽管保持目录结构不变,但仍递归删除目录中所有级别的所有文件)。
我在GNOME 3.18上运行Ubuntu GNOME 15.10,可以做到这一点吗?如果是这样,怎么办?我希望这是完全自动化的,不需要用户交互。这应该是我登录时自动启动的,所以我不需要在每次启动时都运行。
Answers:
使用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小时。当找到最近一次访问文件的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)'
您应该可以使用以下命令删除其中1天以上的所有文件/home/username/directory
及其下面的所有目录:
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
以获取有关它们的更多信息。