web-dev-qa-db-ja.com

ファイルシステムの論理構造(シンボリックリンクターゲットを含む)を単一の軽量ファイル(非バイナリ)で表すことはできますか?

何年にもわたって複数のSQLおよびNoSQLデータベースで遊んだ後、データ中心の個人用アプリの移植性を確保するための最善の方法は、すべての真正なデータベースを完全に回避することだと感じています。ファイルシステムは、移植性があり、人間が読める形式であるため、私が作成している個人用アプリケーションのタイプに十分な寿命を持つ美しいデータベースパラダイムだと思います。これは、多対1の関係を表すシンボリックリンクを備えたツリー構造(パーティション化に適しています)を適用するグラフデータベースのようなものです。

ファイルシステムトポロジ全体を単一のファイルとしてエクスポートする方法はありますか? findコマンドの出力は有望ですが、シンボリックリンクが何を指しているかを示すデータをエクスポートする標準化された方法はありません。次のようなfind出力形式を自分で選択することは考えたくありません。

/home/me/photos/beach/me_and_my_dog.jpg -> /home/me/photos/beach/1.jpg

誰かが以前にファイルシステムトポロジのエクスポート形式を確立する作業を行ったことがある場合。

もう1つの候補はJSONファイルです。

home : [{
    me : [{
        photos : [{
            beach : [{
                1.jpg,
                { me_and_my_dog.jpg : ./1.jpg }
            }]
        }]
    }
}]

しかし、ファイルタイプを表す方法は複数あり、誰かがすでに標準を確立する作業を行っているのではないかと思います。

ファイルの内容をエクスポートしたくないことに注意してください。エクスポートが必要以上に大きくなります。

13

tree コマンドの出力には、探しているものが表示されているようです。

.
└── photos
    └── beach
        ├── 1.jpg -> me_and_dog.jpg
        └── me_and_dog.jpg

新しいバージョン コマンドの==は、HTML、XML、またはJSONにも出力されます。

XML出力:

<?xml version="1.0" encoding="UTF-8"?>
<tree>
  <directory name=".">
    <directory name="photos">
      <directory name="beach">
        <link name="1.jpg" target="me_and_dog.jpg"></link>
        <file name="me_and_dog.jpg"></file>
      </directory>
    </directory>
  </directory>
  <report>
    <directories>2</directories>
    <files>2</files>
  </report>
</tree>
14
heavyd

これにはmtreeを使用できます。 www.freebsd.org/cgi/man.cgi?query=mtree&sektion=8&manpath=FreeBSD+6.3-RELEASE および code.google.com/p/mtree-port を参照してください。

mtree -c

それは非常に用途が広いです。

2
user400344