2013-03-02 189 views
0

我有一個大型的目錄樹結構約10年的文件存檔,在較大的樹中的不同位置有多個較小的嘗試副本。由於缺乏一致的備份策略和備案策略(基本上都屬於我自己的錯誤),該樹逐漸發展成爲這種結構。查找大樹結構中相同的目錄樹

我正在尋找一種方法來在較大的樹中找到相同的樹木副本,這樣我就可以刪除我不需要的副本,讓我更近一步地清理這個大混亂。

我以爲我可以編寫一個腳本來構建樹中的文件數據庫,這樣我就可以編寫另一個腳本來查找相同的樹,從而刪除樹中最深層嵌套的樹副本。

但是,我不知道如何在數據庫設計和使用什麼樣的算法來有效比較這些樹來找到相同的副本方面做得最好。

回顧一下,這是樹的樣子:

備份/文件夾1/ 備份/ somecomputer /庫/文件夾1 備份/ othercomputer /文件夾1 ...

沒有保證樹是「完整的」 - 可能是樹相似,但只有樹的一個副本包含大多數文件和子目錄。所以這是關於找到最「完整」的樹。

如果任何人有任何其他想法如何解決這個問題或有效地清理這樣的混亂的結構,而不會超過每個單獨的文件,我會非常感激!

由於 乙

回答

0

也許使用後綴樹數據結構,以找到最長共同子串 - 甚至可能與從而代表一個相似性度量不同。

根據層次結構的每個文件/目錄在新樹中的一個節點的意義上創建反映現有層次的新樹。

爲您打造樹:使用的FileFilter和降序因爲這是一個目錄型的每個條目可能遞歸exapmple:

在新樹中創建從根其路徑到該節點的每個節點。將該路徑作爲密鑰導入Map中,其中鍵是路徑,值是新樹中的節點引用。

然後,您可以針對此映射的keySet使用後綴樹算法來查找共享通用後綴的條目 - 這些條目恰好是可以刪除的條目。

這需要照顧相同的子樹。後綴樹也允許識別「未命中」 - 即。如果路徑中有一個或多個鏈接在兩個路徑之間存在差異。