​[20210624]find -mtime +N N -N的時間範圍問題.txt

lfree發表於2021-06-25

[20210624]find -mtime +N N -N的時間範圍問題.txt

--//今天再次遇到使用find問題。以前的連結:
--//http://blog.itpub.net/267265/viewspace-2766983/ => [20210408]使用linux find注意.txt

# date
Thu Jun 24 09:03:10 CST 2021

# ls -ltr | head
total 54052
-rw-r----- 1 oracle oinstall 780 2021-06-22 10:38:35 dbcndg2_ora_7123_20210622103835767385143795.aud
-rw-r----- 1 oracle oinstall 779 2021-06-22 10:41:23 dbcndg2_ora_8364_20210622104123871801143795.aud
-rw-r----- 1 oracle oinstall 769 2021-06-22 10:42:36 dbcndg2_ora_8423_20210622104236323093143795.aud
-rw-r----- 1 oracle oinstall 769 2021-06-22 10:42:36 dbcndg2_ora_8421_20210622104236233765143795.aud
-rw-r----- 1 oracle oinstall 769 2021-06-22 10:42:36 dbcndg2_ora_8419_20210622104236184227143795.aud
-rw-r----- 1 oracle oinstall 769 2021-06-22 10:42:38 dbcndg2_ora_8453_20210622104238972264143795.aud
-rw-r----- 1 oracle oinstall 769 2021-06-22 10:42:38 dbcndg2_ora_8451_20210622104238926965143795.aud
-rw-r----- 1 oracle oinstall 769 2021-06-22 10:42:38 dbcndg2_ora_8449_20210622104238876984143795.aud
-rw-r----- 1 oracle oinstall 769 2021-06-22 10:42:38 dbcndg2_ora_8447_20210622104238823625143795.aud

# /usr/bin/find /u01/app/oracle/admin/dbcndg2/adump -mtime +1 -name "*.aud"

--//日期2021/6/24 09:03:10,為什麼find -mtime +1 執行時2021/6/22號的檔案沒有顯示呢?
--//按照我以前的理解日期是2021/06/23 09:03:10之前aud檔案都會顯示。我理解錯誤嗎?

--//補充如果按照連結http://www.oracleblog.org/study-note/how-to-calculate-find-mtime/的計算方法.
--//2021/06/23 09:03:10 之前的檔案都會顯示.

# touch -d 20210622 aaa.aud
# ls -l aaa.aud dbcndg2_ora_7123_20210622103835767385143795.aud
-rw-r--r-- 1 root   root       0 2021-06-22 00:00:00 aaa.aud
-rw-r----- 1 oracle oinstall 780 2021-06-22 10:38:35 dbcndg2_ora_7123_20210622103835767385143795.aud

# /usr/bin/find /u01/app/oracle/admin/dbcndg2/adump  -name "*.aud" -mtime +1
/u01/app/oracle/admin/dbcndg2/adump/aaa.aud
--//可以顯示。

# touch -d "2021/06/22 09:03:00" aaa.aud
# ls -l aaa.aud dbcndg2_ora_7123_20210622103835767385143795.aud
-rw-r--r-- 1 root   root       0 2021-06-22 09:03:00 aaa.aud
-rw-r----- 1 oracle oinstall 780 2021-06-22 10:38:35 dbcndg2_ora_7123_20210622103835767385143795.aud

# /usr/bin/find /u01/app/oracle/admin/dbcndg2/adump  -name "*.aud" -mtime +1
/u01/app/oracle/admin/dbcndg2/adump/aaa.aud
--//可以顯示。

# date
Thu Jun 24 09:21:32 CST 2021

# touch -d "2021/06/22 09:30:00" aaa.aud
# ls -l aaa.aud dbcndg2_ora_7123_20210622103835767385143795.aud
-rw-r--r-- 1 root   root       0 2021-06-22 09:30:00 aaa.aud
-rw-r----- 1 oracle oinstall 780 2021-06-22 10:38:35 dbcndg2_ora_7123_20210622103835767385143795.aud

# date
Thu Jun 24 09:22:14 CST 2021

# /usr/bin/find /u01/app/oracle/admin/dbcndg2/adump  -name "*.aud" -mtime +1
--//無顯示。
--//你可以發現實際上是2天之前的檔案才會顯示。為什麼會是這樣呢?

# touch -d "2021/06/22 09:23:00" aaa.aud
# date ;/usr/bin/find /u01/app/oracle/admin/dbcndg2/adump  -name "*.aud" -mtime +1 -exec ls -l {} \;
Thu Jun 24 09:24:21 CST 2021
-rw-r--r-- 1 root root 0 Jun 22 09:23 /u01/app/oracle/admin/dbcndg2/adump/aaa.aud

--//看來我自己對於find -mtime 裡面的+n數字理解錯誤。
--//我找到一個連結:http://www.oracleblog.org/study-note/how-to-calculate-find-mtime/
--//該blog中時間演算法跟我以前的理解是一致的,但是我的測試確實與實際情況不符合。

--//晚上在家裡使用windows 7下的Cygwin64測試看看.

$ date
Thu, Jun 24, 2021  9:46:54 PM
--//注 晚上2021/06/24 21:46:54.

$ touch -d "2021/06/22 09:23:00" aaa.aud
$ touch -d "2021/06/23 09:23:00" bbb.aud
$ touch -d "2021/06/24 09:23:00" ccc.aud

$ ls -ltr *.aud
-rw-r--r-- 1 Administrator None 0 Jun 22 09:23 aaa.aud
-rw-r--r-- 1 Administrator None 0 Jun 23 09:23 bbb.aud
-rw-r--r-- 1 Administrator None 0 Jun 24 09:23 ccc.aud

$ find . -name "*.aud" -mtime +2
--//無顯示

$ find . -name "*.aud" -mtime +1  -exec  ls -l {} \;
-rw-r--r-- 1 Administrator None 0 Jun 22 09:23 ./aaa.aud

--//按照這個介紹http://www.oracleblog.org/study-note/how-to-calculate-find-mtime/的計算方法.
--//-mtime +1應該是2021/06/23 21:46:54時間之前的檔案都顯示.而實際不是.

$ date
Thu, Jun 24, 2021 10:18:09 PM

$ touch -d "2021/06/22 22:10:00" bbb.aud

$ find . -name "*.aud" -mtime +1  -exec ls -l {} \+
-rw-r--r-- 1 Administrator None 0 Jun 22 09:23 ./aaa.aud
-rw-r--r-- 1 Administrator None 0 Jun 22 22:10 ./bbb.aud

$ date
Thu, Jun 24, 2021 10:20:11 PM

$ touch -d "2021/06/22 22:22:00" bbb.aud

$ find . -name "*.aud" -mtime +1  -exec ls -l {} \+
-rw-r--r-- 1 Administrator None 0 Jun 22 09:23 ./aaa.aud

--//家裡的測試與辦公環境的測試一樣,看來許多人包括我理解都是錯誤的.
--//實際上-mtime +1 顯示的是2天之前的檔案,而不是1天.比較正確的理解應該是

--//假設現在時間是2021/06/24 22:20:11.
-mtime +1 => 小於2021/06/22 22:20:11
-mtime  1 => 2021/06/22 22:20:11~ 2021/06/23 22:20:11
-mtime -1 => 大於 2021/06/23 22:20:11
--//是否包含等於我的測試很難判斷,看來許多人對於這個問題的理解都是錯誤的.

$ date
Thu, Jun 24, 2021 10:30:53 PM

$ touch -d "2021/06/22 23:10:00" bbb.aud

$ find . -name "*.aud" -mtime +1  -exec ls -l {} \+
-rw-r--r-- 1 Administrator None 0 Jun 22 09:23 ./aaa.aud

$ find . -name "*.aud" -mtime 1  -exec ls -l {} \+
-rw-r--r-- 1 Administrator None 0 Jun 22 23:10 ./bbb.aud

$ find . -name "*.aud" -mtime -1  -exec ls -l {} \+
-rw-r--r-- 1 Administrator None 0 Jun 24 09:23 ./ccc.aud

--//只有這樣理解才是正確的.
--//即使我使用windows下的find,我的方法也是正確的.

D:\tools\cygwin64\home\Administrator\find>D:\tools\linux\usr\local\wbin\date
Thu Jun 24 22:43:10 中國標準時間 2021

D:\tools\cygwin64\home\Administrator\find>ls -ltr
total 0
-rw-rw-rw-   1 user     group           0 Jun 22 09:23 aaa.aud
-rw-rw-rw-   1 user     group           0 Jun 22 23:10 bbb.aud
-rw-rw-rw-   1 user     group           0 Jun 24 09:23 ccc.aud

D:\tools\cygwin64\home\Administrator\find>find  -mtime -1
.
.\ccc.aud

D:\tools\cygwin64\home\Administrator\find>find  -mtime 1
.\bbb.aud

D:\tools\cygwin64\home\Administrator\find>find  -mtime +1
.\aaa.aud

--//後記:如果你仔細看連結https://oracleblog.org/study-note/how-to-calculate-find-mtime/下面的評論也說明一些人沒有作出作
--//者的測試.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2778423/,如需轉載,請註明出處,否則將追究法律責任。

相關文章