Linux
確保在某個時間沒有從目錄中刪除文件
我不小心
rm -rf
在我正在工作的一個大目錄上啟動了一個。除其他外,該data
目錄包含一個包含許多子目錄的目錄,每個子目錄都包含數千個文本文件。本質上它看起來像這樣$ tree data data ├── collection0 │ ├── input │ │ ├── file0.txt │ │ ├── file1.txt │ │ ├── ... │ │ └── file9999.txt │ └── output │ ├── file0.txt │ ├── file1.txt │ ├── ... │ └── file9999.txt ├── ... └── collection99 ├── input │ ├── file0.txt │ ├── file1.txt │ ├── ... │ └── file9999.txt └── output ├── file0.txt ├── file1.txt ├── ... └── file9999.txt
我能夠
rm -rf
很快地中斷這個過程,但是當然在半秒左右的執行時間內,其他子目錄中的一些文件被刪除了。我的問題是,有沒有辦法 100% 確定給定的子目錄在此期間是否失去了任何文件?似乎
Modify
失去文件的目錄上的時間已更新到文件被刪除的時間,並且使用這種方法我認為數據子目錄中的文件沒有被刪除(假設 2021-09-08 是rm -rf
事件的日期):$ find data -mindepth 2 -maxdepth 2 -type d -exec stat {} -c '%n %y' \; data/collection0/input 2021-08-28 05:45:49.624228368 -0400 data/collection0/output 2021-08-28 05:45:49.624228368 -0400 ... data/collection99/input 2021-08-29 04:55:38.772912003 -0400 data/collection99/output 2021-08-29 04:55:38.772912003 -0400 $ find data -mindepth 2 -maxdepth 2 -type d -exec stat {} -c '%n %y' \; | grep 2021-09-08 $
這是一個可靠的方法嗎?
Linux手冊頁
stat(2)
說:該欄位
st_mtime
由文件修改更改,例如,通過mknod(2)
、truncate(2)
、utime(2)
和write(2)
(超過零字節)。 此外,st_mtime
通過創建或刪除該目錄中的文件來更改目錄。 該st_mtime
欄位不會因所有者、組、硬連結計數或模式的更改而更改。
st_ctime
通過寫入或設置 inode 資訊(即所有者、組、連結計數、模式等)來更改欄位。
rm
所以,是的,如果觸及每個目錄,應該能夠依賴正在更新的修改時間。當然,前提是之後沒有手動重置,但在這種情況下,應該更新*更改時間戳(ctime)。*好吧,如果我正確理解了手冊頁文本,那麼 ctime 也會在 mtime 任何時候更新,所以只看那個就足夠了。此外,您只能使用 mtime 來證明是否定的。如果時間戳被更新,則無法知道它是由於文件被刪除、另一個文件被創建還是時間戳被手動修改而發生的。