如何删除超过X小时的文件

我正在写一个需要删除旧文件的bash脚本。

目前使用的是:

find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete 

这将删除超过1天的文件。

但是,如果我需要更好的分辨率,比如说6个小时, 有一个很好的干净的方式来做到这一点,就像使用find和-mtime一样吗?

find-mmin选项吗? 这可以让你testing上次修改后的分钟数:

 find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete 

或者也许看看使用tmpwatch做同样的工作。 phjr也在评论中推荐了tmpreaper

你可以这样做:1小时前创build一个文件,并使用-newer file参数。

(或使用touch -t创build这样的文件)。

-min是分钟。

尝试看手册页。

 man find 

更多的types。

对于SunOS 5.10

  Example 6 Selecting a File Using 24-hour Mode The descriptions of -atime, -ctime, and -mtime use the ter- minology n ``24-hour periods''. For example, a file accessed at 23:59 is selected by: example% find . -atime -1 -print at 00:01 the next day (less than 24 hours later, not more than one day ago). The midnight boundary between days has no effect on the 24-hour calculation. 

find$ PATH -name $ log_prefix“*”$ log_ext -mmin + $ num_mins -exec rm -f {} \;

如果你的“find”版本中没有“-mmin”,那么“-mtime -0.041667”就会接近“最近一小时”,所以在你的情况下,使用:

 -mtime +(X * 0.041667) 

所以,如果X表示6小时,那么:

 find . -mtime +0.25 -ls 

因为24小时* 0.25 = 6小时

这就是@iconoclast在他们对另一个答案的评论中所怀疑的方式所能做的。

用户使用crontab或者/etc/crontab创build文件/tmp/hour

 # mh dom mon dow user command 0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1 

然后用它来运行你的命令:

 find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \;