注釋:
一個臨時檔案目錄/exp/temp/之前寫好腳本每天晚上23:30 定時清理1天前的所有檔案;
今天客戶找我/exp/temp/目錄存在2天前的檔案!
難道 find /exp/temp/* -ctime +1 -exec rm -rf {} \; 指令是查找‘2天’前的檔案?、
看看我們的環境吧~
[root@report2 ~]# date
<b>fri jan 16 17:34:39 cst 2015</b>
[root@report2 ~]#
檢視檔案資訊
[root@report2 ~]# ll /exp/temp/
drwxr-xr-x 3 root root 4096 <b>jan 14 20:07</b> bj_unit_1421237222585
-rw-r--r-- 1 root root 3238 jan 14 20:07 bj_unit_1421237222585.zip
drwxr-xr-x 3 root root 4096 <b>jan 14 20:08</b> bj_unit_1421237303193
-rw-r--r-- 1 root root 3520 jan 14 20:08 bj_unit_1421237303193.zip
drwxr-xr-x 3 root root 4096 <b>jan 14 20:11</b> hj_unit_1421237501049
-rw-r--r-- 1 root root 45621 jan 14 20:12 hj_unit_1421237501049.zip
[root@report2 ~]#
<b>***檔案都是2015-01-14 20點零幾生成的目錄/檔案,最大時間是2015-01-14 20:12,最小時間</b><b>是2015-01-14 20:07</b>
<b></b>
<b>***</b><b>我們來執行一下往常的清理指令 find /exp/temp/* -ctime +1 -exec rm -rf {} \; </b>
<b>***</b><b>按理說應該将2015-01-16 17:34:39 - 24小時= 2015-01-15 17:34:39的檔案全部清理才對。</b>
[root@report2 ~]# find /exp/temp/* -ctime +1 -exec rm -rf {} \; ##執行查找删除指令
[root@report2 ~]# ll /exp/temp/ ##檢視清理情況
drwxr-xr-x 3 root root 4096 jan 14 20:07 bj_unit_1421237222585
drwxr-xr-x 3 root root 4096 jan 14 20:08 bj_unit_1421237303193
drwxr-xr-x 3 root root 4096 jan 14 20:11 hj_unit_1421237501049
[root@report2 temp]#
<b>*** 發現檔案并沒有做清理,那麼是為什麼沒有清理呢,指令有問題?</b>
<b>*** 測試下-ctime +值 在哪個範圍值能查到什麼時間的檔案</b>
[root@report2 ~]# date
<b>fri jan 16 17:41:05 cst 2015</b>
[root@report2 ~]# find /exp/temp/* -ctime +0.90 <b> ## 0.90*24=21.6 小時 能查到2015-01-14 20:08的bj_unit_1421237303193檔案</b>
/exp/temp/bj_unit_1421237222585
/exp/temp/bj_unit_1421237222585.zip
/exp/temp/bj_unit_1421237303193
/exp/temp/bj_unit_1421237303193.zip
<b>fri jan 16 17:41:31 cst 2015</b>
[root@report2 ~]# find /exp/temp/* -ctime +0.89 <b> ##0.89*24=21.36 小時 能查到2015-01-14 20:12的hj_unit_1421237501049檔案(最大檔案為該檔案)</b>
/exp/temp/hj_unit_1421237501049
/exp/temp/hj_unit_1421237501049.zip
<b> 分析:</b>
<b> 測試結果:</b>
<b> 17:41:05時, find /exp/temp/* -ctime 0.90 天前(21.6 小時 ) 能查到2015-01-14 20:08的bj_unit_1421237303193檔案</b>
<b> 17:41:31時, find /exp/temp/* -ctime 0.89 天前(21.36 小時 )能查到2015-01-14 20:12的hj_unit_1421237501049檔案</b>
<b> </b>
<b> 而具體當時時間 0.89和0.9天前分别應該是什麼時間呢?</b>
sql> select ((24*60)+(17*60+41) -(0.9*24*60))/60 from dual ; ((24*60)+(17*60+41)-(0.9*24*60))/60 ----------------------------------- 20.0833333
sql> select ((24*60)+(17*60+41.5) -(0.89*24*60))/60 from dual ; ((24*60)+(17*60+41.5)-(0.89*24*60))/60 -------------------------------------- 20.3316667 sql> <b> *** 從sql上能看出 </b> <b> *** 2015-01-16 17:41分時的0.89天前能查到2015-01-14 20:08前生産的檔案【2015-01-14 20:08前包括bj_unit_1421237222585/bj_unit_1421237303193】</b> <b> *** 2015-01-16 17:41分時的0.90天前能查到2015-01-14 20:33前生産的檔案【2015-01-14 20:33前包括所有檔案,是以把所有都顯示出來了..】</b> <b> *** 從0.89天前 能看出來(當時0.89天前)</b><b>2015-01-15 20:08 -2015-01-14 20:08(系統0.89天前) 正好差1天</b> <b> *** 那想删除一天前生成的檔案應該改為find /exp/temp/* -ctime -0 -exec rm -rf {} \; 其中 0=1-1</b> <b> *** 而每天23:30執行 find 所謂的‘1天’前的檔案進行删除,實際卻是1+1=2天前的才進行删除,也導緻今天執行find ..rm 沒有删除任何檔案;</b> <b> *** 至于為什麼一直以來教材上對find /exp/temp/* -ctime +1 指令解釋是查找1天前生成的檔案,而實際上除了我們生産環境aix上其他所有環境都是今天測試的樣子</b> <b> *** 隻能默默的覺得是linux不是最官方的被改過了.. 大家也看看你們的crontal find .. -ctime的是否也也同樣的問題!</b> <b> *** 或許誰能給我解釋這個情況..先表示感謝.!</b>
【源于本人筆記】 若有書寫錯誤,表達錯誤,請指正...