如何使我的系统删除某个目录中的所有文件早于某个特定时间,同时又保持目录结构完整?


12

我的机器上有一个目录,可以将其视为自己的tmp目录,但是它在我的~目录中。并且我想这样做,以便我的系统每3小时删除该目录中早于一天的目录中的所有文件(尽管保持目录结构不变,但仍递归删除目录中所有级别的所有文件)。

我在GNOME 3.18上运行Ubuntu GNOME 15.10,可以做到这一点吗?如果是这样,怎么办?我希望这是完全自动化的,不需要用户交互。这应该是我登录时自动启动的,所以我不需要在每次启动时都运行。

Answers:


21

使用find

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

  • -type f 将仅查找文件

  • -mtime +0 如果文件是在一天或一天​​之前最后修改的,它将与文件匹配

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

这里的问题是-mtime +0,大多数人可能会想到使用,-mtime +1find在计算天数时会忽略任何小数时间。因此,-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)'

6

您应该可以使用以下命令删除其中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等。

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


4
这个答案实际上是错误的,请参阅其他答案

4
由于此答案是错误的,并且实际上没有说其他答案,因此请改善您的答案以使其正确且比其他答案更好,或者将其删除。

5
@ParanoidPanda我知道您想要高质量的答案,但是基本上不需要对同一件事进行两次评论,并且可以将其视为具有侵略性,特别是对于新用户而言。
RPiAwesomeness

2
@RPiAwesomeness:好的,我第二次评论是因为我没有时间编辑我的第一条评论,我也想说他们应该删除他们的答案,尽管我的第一条评论未必一定能使我理解不想让他们感到受到攻击,就像我只是在说他们给出了错误的答案,现在必须删除它,所以我补充了一些改进。但是我可以看到这是怎么做的,所以我想请您记住:熊猫只有在拿走竹子时才会变得好斗。;-)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.