“find .-daystart -mtime”和“find .-mtime”之间有什么区别?

“find .-daystart -mtime”和“find .-mtime”之间有什么区别?

以下内容有什么区别 -

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如上面提到的和所示。因此,在我看来,更清晰的措辞是“从今天结束开始测量时间,而不是从当前时间开始”。

相关内容