以下内容有什么区别 -
find . -daystart -mtime +5
和
find . -mtime +5
当我测试它时,它产生了相同的输出。
使用有什么好处吗-daystart
?我是这个领域的初学者,所以请求善意的建议。
答案1
它更改了比较文件期限的方式,以便参考点是午夜而不是当前时间(find
运行时)。
举个例子,现在是 2022 年 7 月 8 日上午 11 点 12 分左右。考虑以下文件:
$ touch -d '2022-07-08 09:00' this_morning # 2 h old
$ touch -d '2022-07-07 23:55' yesterday_before_midnight # 11 h old
$ touch -d '2022-07-07 09:00' yesterday_morning # 1 d + 2 h old
-mtime 0
给出零全天的文件。默认情况下,它与当前时间进行比较,因此给出最后 24 小时的时间段:
$ find . -type f -mtime 0
./yesterday_before_midnight
./this_morning
有了-daystart
它更像是查看日历日期。-daystart -mtime 0
给出“零天前”的文件,即从今天开始:
$ find . -type f -daystart -mtime 0
./this_morning
同样,对于至少“一天前”(即超过 24 小时)的文件:
$ find . -mtime +0
./yesterday_morning
以及昨天或之前的内容:
$ find . -daystart -mtime +0
./yesterday_before_midnight
./yesterday_morning
另一种看待它的方法是计算-daystart
文件时间戳和当前时间之间的午夜数。
( )修饰符的意思是“严格大于”(“小于”),/的规则是 find 计算文件年龄中的 24 小时周期数,并删除任何小数部分。因此,最终的意思是“至少一个”,而不是“至少零”。+N
-N
-atime
-mtime
+0
POSIX 的描述-mtime
是:
-mtime n
如果从初始化时间中减去文件修改时间除以 86400(丢弃任何余数),则主项应评估为 truen。
因此,默认时间线(不带-daystart
)是这样的:
...-|-- age 2 days --|-- age 1 day ---|-- age 0 days --|
^ ^ ^ ^
72 h ago 48 h ago 24 h ago current time
随着-daystart
,参考点移动到午夜:
...-|-- age 2 days --|-- age 1 day ---|-- age 0 days --|
^ ^ ^ ^
start of start of last midnight / next midnight /
the day before yesterday start of today end of today
(未来的文件可能会得到负时间,但不能直接指定,因为减号意味着不同的东西。但是您可以使用它,-mtime -0
它会给出将来修改的文件,或者-daystart -mtime -0
会给出明天或以后修改的文件.)
碰巧,也与/一起-daystart
工作,它们同样从一天结束时开始计算:-amin
-mmin
$ touch -d '12:00' today_1200.txt # noon today
$ touch -d '23:00' today_2300.txt # late evening today
$ find . -type f -daystart -mmin +120
./today_1200.txt
$ find . -type f -daystart -mmin -120
./today_2300.txt
$ find . -type f -daystart -mmin -$((13*60))
./today_2300.txt
./today_1200.txt
(23:00 为距当日结束时间不足 120 分钟,12:00 为距当日结束时间超过 120 分钟。两者均在距当日结束时间 13*60 分钟以内。)
这手册页说的是-daystart
:
从今天开始测量时间,而不是从 24 小时前开始。
这听起来像是一个相当奇怪的措辞。他们给出的似乎是一整天的截止时间,但措辞听起来像是他们在指示零参考点。默认情况下,这将是当前时间,并移动到今天结束,-daystart
如上面提到的和所示。因此,在我看来,更清晰的措辞是“从今天结束开始测量时间,而不是从当前时间开始”。