簡體   English   中英

獲取 UNIX 目錄樹結構到 JSON 對象中

[英]Get UNIX directory tree structure into JSON object

我正在嘗試構建一個可視化文件結構的瀏覽器應用程序,因此我想將文件結構打印到 JSON 對象中。

我已經嘗試使用通過管道傳輸到 sed 的“ls”的許多變體,但似乎 find 效果最好。

現在我只是想使用命令

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

並標記路徑變量

我已經嘗試過使用 PHP-exec 這個簡單的 ajax,但是數組遍歷真的很慢。 我想直接從 bash 腳本中執行此操作,但我無法弄清楚如何獲取關聯數組的傳遞引用以遞歸地將所有標記化路徑變量添加到樹中。

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

謝謝!

我不知道您的應用程序的要求是什么,但是解決您的問題(以及許多其他問題)的一種解決方案是將實際文件系統布局隱藏在抽象層后面。

本質上,您編寫了兩個線程。 第一個抓取文件結構並創建其內容的數據庫表示。 第二個響應瀏覽器請求,查詢第一個線程創建的數據庫,並生成您的 JSON(即普通的 Web 請求處理程序線程)。

通過抽象底層存儲結構(文件系統),你創建了一個可以添加並發、處理 IO 錯誤等的層。 當有人更改結構內的文件時,Web 客戶端是不可見的,直到“刮板”線程檢測到更改並更新數據庫。 但是,由於 Web 請求與讀取底層文件結構無關,而只是查詢數據庫,因此響應時間應該很快。

HTH,你好。

9 年后......使用應該可以完成這項工作。

tree ~ -J -L ? -P '?' -d --noreport

在哪里:

  • -J 輸出為 json
  • -L 最大級別深度(相當於找到 -maxdepth)
  • 要包含的 -P 模式(相當於查找 -name)
  • -d 僅目錄(相當於查找 -type d)

遍歷磁盤總是比理想的要慢,僅僅是因為需要完成所有的查找。 如果這對您來說不是問題,我的建議是努力消除開銷……從最小化 fork() 調用的次數開始。 然后,您可以將結果緩存多久您覺得合適。

由於您已經提到了 PHP,我的建議是用 PHP 編寫整個服務器端系統並使用DirectoryIteratorRecursiveDirectoryIterator類。 這是一個類似於您要求使用前者實現的內容的SO 答案

如果磁盤 I/O 開銷是一個問題,我的建議是按照mlocate 的方式實現一個系統,該系統將目錄列表與目錄 ctimes 一起緩存,並使用 stat() 比較 ctimes 並僅重新讀取內容已更改的目錄.

我在 PHP 中沒有做太多文件系統工作,但是,如果有幫助,我可以為您提供基本 mlocate 風格的 updatedb 進程的 Python 實現。 (我用它來索引文件,如果我的驅動器出現故障,必須手動從 DVD+R 恢復,因為它們太大而無法舒適地安裝在我的 rdiff-backup 目標驅動器上)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM