[20210626]find -mtime +N N -N時間問題補充.txt

lfree發表於2021-06-26

[20210626]find -mtime +N N -N時間問題補充.txt

--//昨天find -mtime的測試,為了更好的說明問題,做一個例子:
--//還有另外一個原因確定是否包括等於的情況.

--//後記:應該寫成Q second , 不過不影響測試結果.就是升序第3個日期的時間部分表示當時時間(時分秒).

--//順便說一下我修改ls的別名:
alias ll='ls -l --color=auto --time-style=+"%Y-%m-%d %H:%M:%S"' 2>/dev/null
alias l.='ls -d .* --color=auto --time-style=+"%Y-%m-%d %H:%M:%S"' 2>/dev/null
alias ls='ls --color=auto --time-style=+"%Y-%m-%d %H:%M:%S"' 2>/dev/null


$ 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)天.

--//我敢打賭許多人在這個問題的理解上都是錯誤的.

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

相關文章