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

它目前实现使用:

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

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

然而,如果我需要一天,比如6小时前的更好的分辨率呢?有没有干净利落的方法,比如使用find和-mtime?


当前回答

如果你的"find"版本中没有"-mmin",那么"-mtime -0.041667"将非常接近"最近一小时内",所以在你的情况下,使用:

-mtime +(X * 0.041667)

如果X表示6小时,则:

find . -mtime +0.25 -ls

有效是因为24小时* 0.25 = 6小时

其他回答

按照@iconoclast在另一个答案的评论中所思考的方式,一个人可以做些什么。

使用crontab为用户或/etc/crontab创建文件/tmp/hour:

# m h 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 {} \;

如果你的"find"版本中没有"-mmin",那么"-mtime -0.041667"将非常接近"最近一小时内",所以在你的情况下,使用:

-mtime +(X * 0.041667)

如果X表示6小时,则:

find . -mtime +0.25 -ls

有效是因为24小时* 0.25 = 6小时

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

您可以使用这个技巧:在1小时前创建一个文件,并使用-newer file参数。

(或者使用touch -t来创建这样的文件)。

对于 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.