某些解決方案可能適用於Windows,但我不熟悉Windows操作系統,因此這將是Linux的重點。在Linux中檢測移動或重命名爲文件的最佳方法?
據我所知,Unix文件系統都有inode的概念,它是存儲文件系統元數據和「文件」的地方。因此,我想知道是否可以使用帶有一些附加信息的inode編號來跟蹤被重命名或移動的文件?
我打算做的是有一個初始掃描,它會創建一個文件名/路徑的數據庫,它所在的磁盤/驅動器,它們的inode編號,最後是某種校驗和(sha-1) 。
這將使系統能夠使用inode編號快速檢測文件是否被移動或重命名,然後它將跟隨校驗和來檢查它是否實際上是相同的文件。
我可以看到這個方案可能出現的問題:
- 文件可以被修改,隨後移動/重命名,這將無法檢測到它,因爲校驗和將不匹配。
- 某些(大多數?)應用程序在修改文件時會創建一個新的臨時文件,然後使用當前文件進行切換,因此即使文件最後未修改,inode也不會匹配。
- 需要存儲它所在的設備/文件系統,因爲每個文件系統上的inode對該文件系統是唯一的。
- 會需要處理的硬鏈接
我想知道如果有,我忘記了這裏的任何其他陷阱?我希望能夠使用inode快速追蹤哪些文件被移動或重命名,然後跟進校驗和以確認它實際上是相同的文件。
不斷運行以監控它們?如果是後者,有一個名爲inotify的Linux內核子系統,可以爲您處理大部分繁重的工作:http://en.wikipedia.org/wiki/Inotify – 2010-08-18 17:24:44
這將是更多的定期掃描更改,我實際上已經考慮過並且自己在「inotify」子系統中看了一下。這似乎有點矯枉過正,它需要始終運行,我主要感興趣的是確定在兩個不同時間段內任何移動或重命名的文件可以相距幾小時或幾個月。 – Pharaun 2010-08-18 17:29:40
關於inotify的一點是,它會消耗幾乎沒有資源,直到一些實際的變化。給定一個文件系統,大多數文件在掃描之間不會發生變化,這比重新掃描整個文件系統的資源要少得多。 – 2010-08-18 17:52:38