2010-11-29 6 views
0

ファイル構造を視覚化するブラウザアプリケーションを作成しようとしています。そのため、ファイル構造をJSONオブジェクトに出力したいと考えています。UNIXディレクトリツリー構造をJSONオブジェクトに変換する

私はsedにパイプされた 'ls'の多くのバリエーションを使ってみましたが、findがうまく動作するようです。

今私はちょうど私がPHP-execの本との単純なAJAXを試してみたが、配列-歩行があるコマンドに

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

を使用して、パス変数に

をトークン化しようとしています本当に遅い。 私はbashスクリプトから直接それをやろうと考えていましたが、連想配列の参照渡しをすべてのトークン化パス変数をツリーに再帰的に追加する方法を理解できません。

これを行うには、より良い方法や確立された方法がありますか?

ありがとうございます!

答えて

1

アプリケーションの要件はわかりませんが、問題(および他の多くの問題)を解決するソリューションの1つは、抽象レイヤの背後にある実際のファイルシステムのレイアウトを隠すことです。

基本的に、2つのスレッドを作成します。最初の人は、ファイル構造をスクラップし、その内容のデータベース表現を作成します。 2番目はブラウザリクエストに応答し、1番目のスレッドによって作成されたデータベースにクエリを行い、JSON(つまり、通常のWebリクエストハンドラスレッド)を生成します。

基本ストレージ構造(ファイルシステム)を抽象化することで、並行性を追加したり、IOエラーを処理したりするレイヤーを作成します。構造内のファイルを変更すると、スクレーパー "スレッドは変更を検出し、データベースを更新します。しかし、Web要求は基本的なファイル構造の読み取りに結びついておらず、単にデータベースに問い合わせるだけなので、応答時間は速くなければなりません。

HTH、 nate。

0

ディスクを歩くことは、実行する必要があるすべてのシークのために、理想よりも遅くなります。それはあなたにとって問題ではない場合、私の助言はオーバーヘッドを排除するために働くことです... fork()呼び出しの数を最小限に抑えることから始める。それでは、あなたが感じている間は結果を適切にキャッシュすることができます。

すでにPHPに言及しているので、サーバサイドのシステム全体をPHPで記述し、DirectoryIteratorまたはRecursiveDirectoryIteratorクラスを使用することをお勧めします。ここでは、前者を使って実装しようとしていることに似た何かのためにSO answerがあります。

ディスクI/Oのオーバーヘッドが問題の場合は、mlocateの行に沿ってディレクトリリストをキャッシュし、stat()を使用してctimesを比較し、ディレクトリを再読み込みするだけのシステムを実装することをお勧めします。その内容は変更されました。

私はPHPで多くのファイルシステムの作業をしませんが、役立つならば、基本的なmlocateスタイルのupdatedbプロセスのPython実装を提供できます。 (私はそれが私のrdiffバックアップドライブに快適にフィットするには大きすぎるので、私のドライブが失敗した場合、DVD + Rから手動でリストアする必要のあるファイルをインデックスに使用します)

関連する問題