2013-07-14 13 views
9

私はPerlの仮想ファイルシステム層を探しています。実際のファイルシステムの実装方法に関係なく、ls,mkdirなどの基本的なファイルシステムルーチンの一般的な抽象化を提供するものです。Perlの仮想ファイルシステム

私はこのようなインタフェースたい:私はMetaCPANにthe VFS packageを見つけ

# create a directory "/some/path/tmp" in my current filesystem 
my $plainfs = Module::new->(type => 'local', root=>'/some/path); 
$plainfs->mdkir("/tmp"); 

# create "tmp" dir on a remote filesystem 
my $sshfs = Module::new->(type=>'ssh', root=>'user:[email protected]:~/pub') 
$sshfs->mdkir("/tmp"); 

を、残念ながら唯一の空、未実装のモジュールがあります。

既に実装されていますか?現在、私は "ローカル"ファイルシステムとftpまたはsshだけを探しています。データベース "ファイルシステム"やその他のCVSなどのエキゾチックな "ファイルシステム"は必要ありません。 20kのMetaCPANモジュールを検索すると、タグ付けシステムなどがなくても苦労します...

+2

ファイル::システムはよく見えます:http://search.cpan.org/~hanenkamp/File-System-1.16/ – perreal

+0

@perrealこのloooksは本当にいいです。深くチェックするつもりです。どのようにそれを見つけるのですか?私はこのパッケージが最初の7ページに示されていない "ファイルシステム"についてMETACPANを探しています。 (Metacpanの検索は本当に大変です。ありがとうございました。 – kobame

+1

@kobame MetaCPANで「ファイルシステム」(引用符なし)を検索すると、これが最初の結果です。優れたIMEですが、それはそれが持つデータとあなたが入力したものだけで動くことができます –

答えて

1

おそらくFile::Systemはあなたが探しているものです。仮想ファイルシステム(必ずしもファイルやディレクトリのみで構成されているわけではありません)を管理するための一般的なオペレーティングシステムに見られる基本的な機能を提供します。

ほとんどの機能は、File::System::Objectパッケージのメソッドとして表示されます。

1

FUSE実装はどうですか? (ユーザー空間のファイルシステム)?私はそれに基づいてperlで実装された少なくとも1つの疑似ファイルシステムがあると思います。結局のところ、実装は非常に簡単で、基本的にはmount、ls、df、statなどのいくつかの操作だけです。私はかつてCのautofsソースを使っていましたが、かなり簡単でした。 http://code.google.com/p/mogilefs/も参照してください。

+0

私は 'implement'ファイルシステムですが、既に実装されている実装を使用しているので、既に抽象化を行っていたモジュールを探しています。おそらく、 "実行可能"ですが、既に何が行われているのか期待しています。 – kobame

+0

ちょうど任意のユーザー空間ファイルシステムを取って、何らかの最上位レベルで、おそらく "return true"またはそれに類似するものを置くことによって、すべての基本的な操作の内部で何をするべきかを取り除きます。 –

1

モジュールアプローチであまりにも頑張ってはいけません。必要なのは、SSH/FTPファイルシステムをローカルファイルシステムとしてマウントし、cd、mkdirなどの標準コマンドを使用するユーティリティです。このためにモジュールが表示されない理由は、このアプローチが一般に好まれるということです。 http://sourceforge.net/apps/mediawiki/fuse/index.php?title=FileSystems

ルックあなたは、単にそれらのファイルシステムのいずれかをマウントするためにFUSEを使用すると、それはそれです。見るべきリンクがいくつかありますが、それらのほとんどはほとんどのディストリビューションでパッケージとして入手できます。ここで

http://sourceforge.net/projects/lufs/ http://lftpfs.sourceforge.net

単にperlの内FUSEファイルシステムをマウントするためのモジュールです:

http://search.cpan.org/~dpavlin/Fuse/Fuse.pm

0

ファイルがたくさんある:: *クロスプラットフォームの異なる部分を扱うモジュールは、ファイルシステム管理。例えば

use File::Spec::Functions qw(catfile); 

あなたは私の$ファイル名= catfileというの$の根、$パスを取得できるようになる、 "$ファイル名の$ EXT"。または私の$ new_directory = catfile $パス、 "new_sub_directory";適切なセパレータを使用してください(例: /またはその他のものである。

あなたが望むように見えるもう一つは、としていたことができます。

かなり便利です、そしてmake_pathのように呼び出すことができます
use File::Path qw(make_path); 

($のNEW_DIRECTORY、{モード=> 0755});

File :: Systemがあなたが望むようにリモートシステムを実際に処理するかどうかは分かりません。

これを処理するには、いくつかの異なる方法がありますが、Net :: SSH :: Expectはこれまで私が使ってきたことであり、それほど悪くないと思います。リモートのファイルシステムを何らかの形でローカルにマウントして、何をしなければならないのか分からなければ、アンマウントしてください。

関連する問題