如何获取每小时第18分钟发出的文件列表?
找到了这个但它列出了特定时间戳之后的所有文件。我只想要在一小时的第18分钟发出的文件。
find . -newermt 'Feb 9'
答案 0 :(得分:1)
假设您正在寻找特定小时的第18分钟(假设是第12小时),您可以这样做:
find . -newermt "Feb 9 12:17:59" -not -newermt "Feb 9 12:19:00"
假设您正在寻找当天任何小时的第18分钟,您可以这样做:
find . -newermt "Feb 9" -not -newermt "Feb 10" -print0 |xargs -0 \
ls -ld --full-time |awk -F : '$2 == 18'
(ls --full-time
是一个GNU扩展,但是你说你在Ubuntu上,所以它支持你。如果你想要的时间在过去的几个月内,没有那个标志你就没事了(只要ls
没有用年份替换时间。)同样,find -newermt
仅在GNU和BSD实现中可用。否则,您可能必须计算分钟并使用{{1} }。)
我还假设-mmin
是您正在寻找的时间类型。正如对该问题的评论中所述,您对-newermt
的使用尚不清楚。 originated
将按修改时间进行搜索,因此您可能需要-newermt
作为文件的“出生时间”。有关进一步说明,请参阅man find
的-newerBt
部分。
更加可移植的版本,不依赖于GNU或BSD扩展,虽然依靠newerXY reference
来计算确切的所需年龄(以分钟为单位),但是:
perl
Time::Local::timelocal
的语法是find . -mmin `perl -MTime::Local -we '$_ = time - timelocal(0,18,12,9,1,2015); printf "%.0f", $_ / 60'`
。请注意,月份是一次性的,因此2月是timelocal(sec,min,hour,day,month-1,year)
,因为Jan是1
。这可能有一些舍入错误,因此最好自己运行perl行,然后使用它的范围(例如,给定perl返回288,尝试0
)。