1. 程式人生 > >準確查詢前一天00:00-24:00增加的檔案

準確查詢前一天00:00-24:00增加的檔案

問題:

發現增量檔案

難點:

1,上傳的檔案都是圖片,目錄結構和檔名稱都沒有與日期相關的規律;

2,作業系統無法使用inotify;

3,上傳圖片的mtime屬性不是上傳操作時間點的時間,比如3月10日上午10點上傳的圖片,其mtime屬性值可能是2012年7月份,也可能是2018年3月3日、3日、5日等;所以,無法使用find的-mtime選項來鎖定前一天00點到今天00點內變動的檔案;

 

最終解決辦法:

經過了個把月的有一搭沒一搭的思考,終於今天把問題解決了,那就是使用find的-ctime來查詢檔案,不要使用mtime。

 

參考文章:

1,ctime和mtime的區別

mtime: (modify time)顯示的是檔案內容被修改的最後時間,比如用vi編輯時就會被改變。(也就是Block的內容)

ctime: (change time)顯示的是檔案的許可權、擁有者、所屬的組、連結數發生改變時的時間。當然當內容改變時也會隨之改變(即inode內容發生改變和Block內容發生改變時)

我的理解:上傳一個新檔案的時候,不論其mtime是什麼,系統都會給它分配一個新的inode用來記錄其元資料,這個時候的ctime必然會修改為建立檔案時的時間;如果已經存在的檔案被修改了,那麼檔案的位元組數必然會變,這也導致其inode資訊必然也會改變,從而ctime也會改變到修改檔案的時間點。到此,ctime完全可以滿足上傳新檔案和修改已經存在的檔案所觸發的時間點。

 

 

2,inode記錄資訊

inode包含檔案的元資訊,具體來說有以下內容:

  * 檔案的位元組數

  * 檔案擁有者的User ID

  * 檔案的Group ID

  * 檔案的讀、寫、執行許可權

  * 檔案的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間。

  * 連結數,即有多少檔名指向這個inode

  * 檔案資料block的位置

可以用stat命令,檢視某個檔案的inode資訊:

stat example.txt

總之,除了檔名以外的所有檔案資訊,都存在inode之中。