2014-09-01 136 views
16

我試圖刪除除最近的日期以外的所有日期日誌。在執行腳本刪除文件之前,我想要測試我的命令以確保我能夠提供準確的結果。解釋find -mtime命令

當執行這些命令的日期是:

Sep 1 00:53:44 AST 2014 

目錄列表:

Aug 27 23:59 testfile.2014-08-27.log 
Aug 28 23:59 testfile.2014-08-28.log 
Aug 29 23:59 testfile.2014-08-29.log 
Aug 30 23:59 testfile.2014-08-30.log 
Aug 31 23:59 testfile.2014-08-31.log 
Sep 1 00:29 testfile.log 

我想-mtime +1應該列出所有文件過了一天了。爲什麼不列出8-30.log?

find . -type f -mtime +1 -name "testfile*log" 
./testfile.2014-08-27.log 
./testfile.2014-08-28.log 
./testfile.2014-08-29.log 

這是所需的效果,但它只是反覆試驗。這是0說什麼?

find . -type f -mtime +0 -name "testfile*log" 
./testfile.2014-08-30.log 
./testfile.2014-08-27.log 
./testfile.2014-08-28.log 
./testfile.2014-08-29.log 
+0

在我的服務器上只有info命令,並且沒有/ mtime選項。 – user3299633 2014-09-01 05:23:31

回答

25

find POSIX規範表示:

-mtimen 主要應如果從初始化時間減去文件修改時間,由86400分(與任何丟棄餘數),是評價爲真n

有趣的是,find的描述沒有進一步指定'初始化時間'。不過,這可能是find初始化(運行)的時間。

在描述中,無論n用作主要參數,它應當被解釋爲一個十進制整數任選被加上之前(「+」)或減號(「 - 」)的標誌,如下:

+n 超過n
    n 究竟n
-n 小於n

在給定的時間(2014-09-01 00:53:44 -4:00,我推斷AST是大西洋標準時間,因此與UTC的時區偏移量是-4: 00 ISO 8601,但+4:00在ISO 9945(POSIX),但它並不重要,所有的東西):

1409547224 = 2014-09-01 00:53:44 -04:00 
1409457540 = 2014-08-30 23:59:00 -04:00 

這樣:

1409547224 - 1409457540 = 89684 
89684/86400 = 1 

即使「秒自時代「的價值觀是錯誤的,相對價值是正確的(對於世界某個時區的某個時區而言,它們是a重新正確)。

爲2014年8月30日的日誌文件中計算的n值因此是完全1(計算是整數運算完成),並且拒絕+1它,因爲它是一個嚴格的> 1比較(而不是>= 1) 。

+0

Simpy,請.. 如果用戶想要修改AGO 2天AGO和更舊 - 3天,4,..,他必須設置'mtime to + 1'?在這種情況下,減號情況對於未來而言是不太重要的。 :D 對嗎? :) – xxxvodnikxxx 2017-12-12 09:26:33

+1

@xxxvodnikxxx:我不確定我明白你在問什麼。但是,您可以編寫'-mtime 6'或'-mtime -6'或'-mtime + 6'。沒有符號的'6'意味着「等於6天 - 在'現在-6 * 86400'和'現在-7 * 86400'之間修改(因爲分數天被丟棄),而'-6'意味着」小於6天以前 - 如此修改,因爲'現在 - 6 * 86400''和'+ 6'的意思是「超過6天的時間 - 如此修改現在 - 7 * 86400'」(其中7有點意外,也許)。如果這沒有幫助(或者你可以證明它是錯誤的),請再次詢問,更清楚地解釋你的問題。 – 2017-12-12 17:55:24

+0

噢,謝謝你的伴侶,這正是什麼沒有讓我感覺:)所以這個數字仍然意味着屏障「過去」,ans標誌只是告訴間隔文件的哪一邊應該是,很好的解釋:) – xxxvodnikxxx 2017-12-13 08:10:20

5

+1意味着2天前。它是圓形的。

+6

這個答案的核心點是正確的,但它缺少很多解釋。 '+ 1'表示2天或更多天(或至少2天前)。引用手冊頁或類似的內容會很有幫助。 – 2014-09-01 06:01:55