2010-11-29 107 views
0

我想構建一個可視化文件結構的瀏覽器應用程序,所以我想將文件結構打印到JSON對象中。獲取UNIX目錄樹結構到JSON對象

我試過使用'ls'的許多變種管道sed,但它看起來像找到最好的作品。

現在我只是想用命令

find ~ -maxdepth ? -name ? -type d -print

與記號化的路徑變量

我試過只是簡單的Ajax和PHP-EXEC這一點,但陣列行走真的很慢。 我正在考慮直接從bash腳本執行它,但我無法弄清楚如何獲得關聯數組的遞歸引用,以遞歸方式將所有的標記化路徑變量添加到樹中。

有沒有更好的或既定的方法來做到這一點?

謝謝!

回答

1

我不知道你的應用程序的要求是什麼,但解決你的問題(和其他一些問題)的一個解決方案是將實際的文件系統佈局隱藏在抽象層後面。

本質上,你寫兩個線程。第一種方法是刪除文件結構並創建其內容的數據庫表示。第二個響應瀏覽器請求,查詢由第一個線程創建的數據庫,並生成您的JSON(即正常的Web請求處理程序線程)。

通過抽象底層存儲結構(文件系統),您可以創建一個可以添加併發性,處理IO錯誤等的層。當有人在結構中更改文件時,它對Web客戶端不可見,直到「刮刀「線程檢測到更改並更新數據庫。但是,由於Web請求並不依賴於讀取底層文件結構並僅查詢數據庫,因此響應時間應該很快。

HTH, nate。

0

因爲所有需要完成的工作,走光盤總是會比理想的慢。如果這對你來說不是問題,我的建議是努力消除開銷......從最小化fork()調用的次數開始。然後,只要您認爲合適,就可以緩存結果。

既然您已經提到過PHP,我的建議是使用PHP編寫您的整個服務器端系統,並使用DirectoryIteratorRecursiveDirectoryIterator類。這是一個SO answer類似於你要求使用前者實現的東西。

如果磁盤I/O開銷是一個問題,我的建議是沿着mlocate的行實現一個系統,它將目錄列表和目錄ctimes一起緩存,並使用stat()來比較ctimes並且只重新讀取目錄其內容已經改變。

我在PHP中並沒有做太多的文件系統工作,但是,如果它有幫助,我可以爲您提供基本mlocate風格updatedb過程的Python實現。 (我用它來索引必須從DVD + R手動恢復的文件,如果我的驅動器因爲太大而不適合我的rdiff備份目標驅動器而失敗)