2016-11-12 26 views
0

有沒有辦法有效地避免os.walk進入一個目錄樹的一個分支,該目錄樹自從前一個os.walk之後沒有改變?識別未改變的目錄的有效方法

我正在使用自定義Python應用程序掃描文件系統的內容,並存儲從內容生成的技術數據並將其存儲在數據庫中。文件系統很大,掃描過程目前需要4個多小時,所以我正在尋找一種方法來動態識別文件系統的哪些分支/目錄不需要重新掃描(因爲沒有更改和數據已經存在)。

我一直在研究在數據庫中存儲目錄校驗和,並在實際處理任何目錄之前,運行當前校驗和以查看是否有任何子文件夾已經看到更改。然而,運行當前的校驗和需要很長時間 - 可能與當前的「掃描一切」方法一樣多。

我見過像Watchdog這樣的軟件包,它們本質上來回運行連續掃描,然而由於這個文件系統非常大,可能需要很長時間(可能是10個小時)才能看到數據庫更新。

+0

我將嘗試一個不同的解決方案:使用windows lastModified元數據存在於每個目錄中,當文件被添加,刪除或更改(但不包括其子目錄)時更新該文件。 「os.path.getmtime(dirpath)」檢索最後修改的元數據,這些元數據需要記錄在數據庫中供將來比較。該操作看起來快速而輕便,並且可能是在大部分情況下保存重型掃描的可行選擇。 – user3535074

回答

0

我能夠使用「os.path.getmtime(dirpath)」爲目錄掃描狀態添加記錄。通過在掃描目錄之前拉取該記錄,我可以檢查它是否已經被掃描,以及是否已經掃描它是否已經對目錄進行了更改,因爲它已經完成。現在只掃描新的或修改的目錄中的文件。