2013-07-14 101 views
9

我正在尋找Perl中的虛擬文件系統層。不管實際的文件系統如何實現,都可以爲基本文件系統例程(如ls,mkdir等)提供一般抽象。Perl中的虛擬文件系統

我想是這樣的接口:

# 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"); 

我發現MetaCPAN the VFS package,遺憾的是隻有空的,未使用的模塊。

已經實施了一些東西?現在,我正在尋找只有「本地」文件系統和FTP或SSH - 我不需要數據庫「文件系統」或任何其他奇特的「文件系統」,如CVS等。尋找20k MetaCPAN模塊是痛苦的,沒有任何標籤系統或類似...

+2

File :: System看起來不錯:http://search.cpan.org/~hanenkamp/File-System-1.16/ – perreal

+0

@perreal這個loooks非常好。要深入檢查。你是怎麼找到它的?我在METACPAN中搜索「文件系統」,這個軟件包沒有在前7頁中顯示。 ;(Metacpan搜索真的很糟糕,非常感謝 – kobame

+1

@ kobame,雖然可以建議我從回答中反向工作,如果我在MetaCPAN上搜索「文件系統」(不含引號),這是第一個結果。是非常出色的IME,但它只能使用它的數據和輸入你的輸入 –

回答

1

也許File::System是你在找什麼。它提供了常見操作系統中用於管理虛擬文件系統(不一定只包含文件和目錄)的基本功能。

大部分功能都以File::System::Object包的方法呈現。

1

一些FUSE實現呢? (用戶空間中的文件系統)?我猜想在perl中至少有一個僞文件系統是基於這個實現的。畢竟,它應該很容易實現,基本上它不過是一些操作,比如mount,ls,df,stat等等。我曾經通過C中的autofs源代碼,看起來非常簡單。您也可以查看http://code.google.com/p/mogilefs/

+0

我不想'執行'文件系統,但*使用*已經完成的實現,所以尋找一個模塊已經完成了抽象。可能它是「可行的」,但希望在某些事情已經完成:)去檢查mogilefs - thanx的指針。 – kobame

+0

只是採取任何用戶空間文件系統,並擺脫它在每個基本操作內部,在一些頂層,可能通過把「返回真」或類似的應該做的。 –

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 $根,$路徑 「$文件名$轉」;或者我的$ new_directory = catfile $ path,「new_sub_directory」;並確保使用正確的分隔符,例如/或\等等。

你似乎想另一件事可以與有:

use File::Path qw(make_path); 

這是非常方便,並且可以被稱爲像make_path($ new_directory,{模式=> 0755});

我不太確定File :: System是否真正以您想要的方式處理遠程系統。

我遇到了幾種不同的方式來處理這個問題,但我認爲Net :: SSH :: Expect是我過去使用的方法,並不算太壞,儘管你可能會更容易如果你能以某種方式在本地安裝遠程文件系統,那麼你需要做的就是卸載它。