[0625]findmtime+NN
[20210626]find -mtime +N N -N时间问题补充.txt
--//昨天find -mtime的测试,为了更好的说明问题,做一个例子:
--//还有另外一个原因确定是否包括等于的情况.
--//后记:应该写成Q second , 不过不影响测试结果.就是升序第3个日期的时间部分表示当时时间(时分秒).
$ mkdir aaa
$ cd aaa
$ seq -3 1 2 | xargs -IQ date "+%Y%m%d%H%M.%S" --date="2 days ago Q seconds ago" | xargs -IQ touch -t Q Q ; find . -mtime +1 -exec ls -ltr {} +; echo ====== ; ls -ltr
-rw-r--r-- 1 oracle oinstall 0 Jun 23 15:53 ./202106231553.13
-rw-r--r-- 1 oracle oinstall 0 Jun 23 15:53 ./202106231553.14
======
total 0
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:53:13 202106231553.13
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:53:14 202106231553.14
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:53:15 202106231553.15
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:53:16 202106231553.16
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:53:17 202106231553.17
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:53:18 202106231553.18
--//看出分界点了吗?执行时的当前时间是2021-06-25 15:53:15.我测试多次find -mtime +1 都是显示2条,注意执行前删除前面测试的文件.
--//实际上比较准确的时间点是 小于 当前时间-2天.
$ rm -f 2021*
--//记住每次测试前执行它,后面不再提及
$ seq -3 1 2 | xargs -IQ date "+%Y%m%d%H%M.%S" --date="2 days ago Q seconds ago" | xargs -IQ touch -t Q Q ; find . -mtime 1 -exec ls -ltr {} +; echo ====== ; ls -ltr
--//注意执行的是find . -mtime 1
-rw-r--r-- 1 oracle oinstall 0 Jun 23 15:55 ./202106231555.52
-rw-r--r-- 1 oracle oinstall 0 Jun 23 15:55 ./202106231555.53
-rw-r--r-- 1 oracle oinstall 0 Jun 23 15:55 ./202106231555.54
-rw-r--r-- 1 oracle oinstall 0 Jun 23 15:55 ./202106231555.55
======
total 0
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:55:50 202106231555.50
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:55:51 202106231555.51
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:55:52 202106231555.52
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:55:53 202106231555.53
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:55:54 202106231555.54
-rw-r--r-- 1 oracle oinstall 0 2021-06-23 15:55:55 202106231555.55
--//当前时间是2021-06-25 15:55:52,
--//find . -mtime 1 的查询时间范围的下边界是 大于等于 当前时间-2天.
$ seq -3 1 2 | xargs -IQ date "+%Y%m%d%H%M.%S" --date="1 days ago Q seconds ago" | xargs -IQ touch -t Q Q ; find . -mtime 1 -exec ls -ltr {} +; echo ====== ; ls -ltr ; rm -f 202106*
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:12 ./202106241612.50
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:12 ./202106241612.51
======
total 0
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:12:50 202106241612.50
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:12:51 202106241612.51
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:12:52 202106241612.52
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:12:53 202106241612.53
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:12:54 202106241612.54
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:12:55 202106241612.55
--//当前时间是2021-06-25 16:12:52
--//find . -mtime 1 的查询时间范围的上边界是 小于 当前时间-1天.
$ seq -3 1 2 | xargs -IQ date "+%Y%m%d%H%M.%S" --date="1 days ago Q seconds ago" | xargs -IQ touch -t Q Q ; find . -mtime -1 -exec ls -ltr {} +; echo ====== ; ls -ltr ; rm -f 202106*
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:19 ./202106241619.35
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:19 ./202106241619.36
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:19 ./202106241619.37
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:19 ./202106241619.38
.:
total 0
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:19 202106241619.33
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:19 202106241619.34
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:19 202106241619.35
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:19 202106241619.36
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:19 202106241619.37
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:19 202106241619.38
======
total 0
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:19:33 202106241619.33
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:19:34 202106241619.34
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:19:35 202106241619.35
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:19:36 202106241619.36
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:19:37 202106241619.37
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:19:38 202106241619.38
--//感觉输出有点奇怪,实际存在一个目录.在作怪,因为. 在find . -mtime -1 的范围包括.目录,改写如下:
$ seq -3 1 2 | xargs -IQ date "+%Y%m%d%H%M.%S" --date="1 days ago Q seconds ago" | xargs -IQ touch -t Q Q ; find . -name "202106*" -mtime -1 -exec ls -ltr {} +; echo ====== ; ls -ltr ; rm -f 202106*
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:22 ./202106241622.54
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:22 ./202106241622.55
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:22 ./202106241622.56
-rw-r--r-- 1 oracle oinstall 0 Jun 24 16:22 ./202106241622.57
======
total 0
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:22:52 202106241622.52
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:22:53 202106241622.53
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:22:54 202106241622.54
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:22:55 202106241622.55
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:22:56 202106241622.56
-rw-r--r-- 1 oracle oinstall 0 2021-06-24 16:22:57 202106241622.57
--//当前时间是2021-06-25 16:22:54.
--//find . -mtime -1 的查询时间范围是 大于等于 当前时间-1天.
总结:
1.感觉测试在细节上浪费时间.
2.总之清楚一点,大致总结如下:
find -mtime +N 表示 小于 <当前时间-(N+1)天 .
find -mtime +1 表示 在 >=当前时间-(N+1)天 <当前时间-(N)天 之间.
find -mtime -1 表示 大于 >=当前时间-(N)天.
--//我敢打赌许多人在这个问题的理解上都是错误的.
以上是 [0625]findmtime+NN 的全部内容, 来源链接: utcz.com/z/519740.html